Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Vue from 'vue'
- import Vuex from 'vuex'
- import axios from 'axios'
- Vue.use(Vuex)
- export default new Vuex.Store({
- state: {
- status: '',
- token: localStorage.getItem('token') || '',
- user : {}
- },
- mutations: {
- auth_request(state){
- state.status = 'loading'
- },
- auth_success(state, token, user){
- state.status = 'success'
- state.token = token
- state.user = user
- },
- auth_error(state){
- state.status = 'error'
- },
- logout(state){
- state.status = ''
- state.token = ''
- },
- },
- actions: {
- login({commit}, user){
- return new Promise((resolve, reject) => {
- commit('auth_request')
- axios({url: 'http://localhost:8001/api/v1/token/create', data: user, method: 'POST' })
- .then(resp => {
- const token = resp.data.token
- const user = resp.data.user
- localStorage.setItem('token', token)
- // Add the following line:
- axios.defaults.headers.common['Authorization'] = 'Bearer ${token}'
- commit('auth_success', token, user)
- resolve(resp)
- })
- .catch(err => {
- commit('auth_error')
- localStorage.removeItem('token')
- reject(err)
- })
- })
- },
- register({commit}, user){
- return new Promise((resolve, reject) => {
- commit('auth_request')
- axios({url: 'http://localhost:8001/api/v1/users/create', data: user, method: 'POST' })
- .then(resp => {
- const token = resp.data.token
- const user = resp.data.user
- localStorage.setItem('token', token)
- // Add the following line:
- axios.defaults.headers.common['Authorization'] = 'Bearer ${token}'
- commit('auth_success', token, user)
- resolve(resp)
- })
- .catch(err => {
- commit('auth_error', err)
- localStorage.removeItem('token')
- reject(err)
- })
- })
- },
- logout({commit}){
- return new Promise((resolve, reject) => {
- commit('logout')
- localStorage.removeItem('token')
- delete axios.defaults.headers.common['Authorization']
- resolve()
- })
- }
- },
- getters : {
- isLoggedIn: state => !!state.token,
- authStatus: state => state.status,
- }
- })
- ...
- import store from './store';
- import Axios from 'axios';
- Vue.prototype.$http = Axios;
- const token = localStorage.getItem('token')
- if (token) {
- Vue.prototype.$http.defaults.headers.common['Authorization'] = 'Bearer ' + token
- }
- ...
- ...
- data() {
- return {
- username: '',
- password: ''
- }
- },
- methods: {
- login: function() {
- let username = this.username
- let password = this.password
- this.$store.dispatch('login', { username, password })
- .then(() => this.$router.push('/'))
- .catch(err => console.log(err))
- }
- }
- ...
Add Comment
Please, Sign In to add comment