import Vue from 'vue'; import Vuex from 'vuex'; import axios from 'axios'; Vue.use(Vuex); export default { namespaced: true, state: { status: '', token: sessionStorage.getItem('token') || '', user: {}, individual: {}, }, 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 = ''; }, }, getters: { isLoggedIn: state => !!state.token, authStatus: state => state.status, }, actions: { login({ commit }, user) { return new Promise((reject) => { commit('auth_request'); axios({ url: '/api/register/authenticate', data: user, method: 'POST', }) .then((resp) => { console.log(resp.data); sessionStorage.setItem('token', resp.data.token); sessionStorage.setItem('username', resp.data.username); sessionStorage.setItem('name', resp.data.name); commit('auth_success', resp.data.token, resp.data); }) .catch((err) => { commit('auth_error'); sessionStorage.removeItem('token'); sessionStorage.removeItem('username'); sessionStorage.removeItem('name'); reject(err); }); }); }, logout({ commit }) { return new Promise(() => { commit('logout'); sessionStorage.removeItem('token'); sessionStorage.removeItem('username'); sessionStorage.removeItem('name'); delete axios.defaults.headers.common.Authorization; }); }, }, };