sodalive-vuejs-creator-admin/src/store/accountStore.js

124 lines
3.6 KiB
JavaScript

import * as memberApi from '@/api/member'
import Vue from 'vue';
const enhanceAccessToken = () => {
const {accessToken} = localStorage
if (!accessToken) return
Vue.axios.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;
}
enhanceAccessToken();
const accountStore = {
namespaced: true,
state: {
userId: '',
nickname: '',
accessToken: '',
profileImage: '',
},
getters: {
isAuthenticated(state) {
state.userId = state.userId || localStorage.userId
state.nickname = state.nickname || localStorage.nickname
state.profileImage = state.profileImage || localStorage.profileImage
state.accessToken = state.accessToken || localStorage.accessToken
return state.accessToken !== undefined &&
state.accessToken !== null &&
state.accessToken !== 'null' &&
state.accessToken !== ''
}
},
mutations: {
LOGIN(state, {userId, nickname, token, profileImage}) {
state.userId = userId
localStorage.userId = userId
state.nickname = nickname
localStorage.nickname = nickname
state.profileImage = profileImage
localStorage.profileImage = profileImage
state.accessToken = token
localStorage.accessToken = token
Vue.axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
},
LOGOUT(state) {
state.userId = ''
state.nickname = ''
state.profileImage = ''
state.accessToken = ''
localStorage.clear()
if (location.pathname === '/') {
location.reload()
} else {
location.replace("/")
}
},
},
actions: {
async LOGIN({commit}, {email, password}) {
let result = false
let errorMessage = null
try {
let res = await memberApi.login(email, password)
if (res.data.success === true) {
commit("LOGIN", res.data.data)
result = true
} else {
errorMessage = res.data.message
}
} catch (e) {
errorMessage = '로그인 정보를 확인해주세요.'
}
return new Promise((resolve, reject) => {
if (result) {
resolve();
} else {
reject(errorMessage)
}
});
},
async LOGOUT({commit}) {
let result = false
let errorMessage = null
try {
let res = await memberApi.logout()
if (res.data.success === true) {
Vue.axios.defaults.headers.common['Authorization'] = undefined;
commit("LOGOUT")
result = true
} else {
errorMessage = res.data.message
}
} catch (e) {
errorMessage = '로그인 정보를 확인해주세요.'
}
return new Promise((resolve, reject) => {
if (result) {
resolve();
} else {
reject(errorMessage)
}
});
},
LOGOUT_WITHOUT_NETWORK({commit}) {
Vue.axios.defaults.headers.common['Authorization'] = undefined;
commit("LOGOUT")
},
}
}
export default accountStore