98 lines
2.7 KiB
JavaScript
98 lines
2.7 KiB
JavaScript
import Vue from 'vue'
|
|
import Vuex from 'vuex'
|
|
import axios from 'axios'
|
|
|
|
const JWT_KEY_NAME = "JWT";
|
|
const baseURL = process.env.VUE_APP_API_LOCATION;
|
|
|
|
Vue.use(Vuex)
|
|
|
|
export default {
|
|
namespaced: true,
|
|
state() {
|
|
return {
|
|
processing: false,
|
|
token: localStorage.getItem(JWT_KEY_NAME) || '',
|
|
name: ''
|
|
}
|
|
},
|
|
mutations: {
|
|
auth_started(state) {
|
|
state.processing = true;
|
|
},
|
|
auth_success(state, {token, name}) {
|
|
state.processing = false;
|
|
state.token = token;
|
|
state.name = name;
|
|
},
|
|
auth_fail(state) {
|
|
state.processing = false;
|
|
state.token = '';
|
|
state.name = '';
|
|
},
|
|
logout(state) {
|
|
state.token = '';
|
|
state.name = '';
|
|
}
|
|
},
|
|
actions: {
|
|
performLogin({commit}, creds) {
|
|
return new Promise((resolve, reject) => {
|
|
commit('auth_started')
|
|
axios.post("auth/login", creds, {baseURL}).then(resp => {
|
|
const token = resp.data.token;
|
|
|
|
if (!token) {
|
|
return reject();
|
|
}
|
|
|
|
localStorage.setItem(JWT_KEY_NAME, token)
|
|
commit('auth_success', {token, name: creds.name})
|
|
return resolve(resp);
|
|
}).catch(err => {
|
|
commit('auth_fail')
|
|
localStorage.removeItem(JWT_KEY_NAME)
|
|
return reject(err);
|
|
})
|
|
})
|
|
},
|
|
performRegister({commit}, creds) {
|
|
return new Promise((resolve, reject) => {
|
|
commit('auth_started')
|
|
axios.post("auth/signup", creds, {baseURL}).then(resp => {
|
|
const token = resp.data.token;
|
|
|
|
if (!token) {
|
|
return reject();
|
|
}
|
|
|
|
|
|
localStorage.setItem(JWT_KEY_NAME, token)
|
|
commit('auth_success', {token, name: creds.name})
|
|
resolve(resp)
|
|
}).catch(err => {
|
|
commit('auth_fail')
|
|
localStorage.removeItem(JWT_KEY_NAME)
|
|
reject(err)
|
|
})
|
|
})
|
|
},
|
|
performLogout({commit}) {
|
|
return new Promise((resolve) => {
|
|
localStorage.removeItem(JWT_KEY_NAME)
|
|
commit('logout')
|
|
resolve();
|
|
});
|
|
}
|
|
},
|
|
modules: {},
|
|
getters: {
|
|
isLoggedIn(state) {
|
|
return !!state.token;
|
|
},
|
|
authInProgress(state) {
|
|
return state.processing;
|
|
}
|
|
}
|
|
}
|