Files
sodalive-vuejs-admin/src/store/accountStore.js
Yu Sung f01f002614 refactor(account): 로그인 상태 필드 정리 및 role 저장
왜: userId/nickname/profileImage는 사용처가 없어 유지보수 단순화. 대신 권한 판별을 위해 role 필요.\n무엇: accountStore에서 세 필드 삭제, role 추가. isAuthenticated 동기화 수정. LOGIN/LOGOUT 로직 role 반영. Axios Authorization 유지.
2026-05-07 14:19:21 +09:00

86 lines
2.3 KiB
JavaScript

import * as accountApi 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: {
accessToken: '',
role: '',
},
getters: {
isAuthenticated(state) {
state.accessToken = state.accessToken || localStorage.accessToken
state.role = state.role || localStorage.role
return state.accessToken !== undefined &&
state.accessToken !== null &&
state.accessToken !== 'null' &&
state.accessToken !== ''
}
},
mutations: {
LOGIN(state, {token, role}) {
state.accessToken = token
localStorage.accessToken = token
state.role = role
localStorage.role = role
Vue.axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
},
LOGOUT(state) {
state.accessToken = ''
state.role = ''
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 accountApi.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)
}
});
},
LOGOUT({commit}) {
Vue.axios.defaults.headers.common['Authorization'] = undefined;
commit("LOGOUT")
},
}
}
export default accountStore