import storage from 'good-storage' import { authentication, basicSso, refreshAndGetAuthenticationToken, logout, } from '@/api/auth.js' import { encryptedData } from '@/utils/encrypt' import { loginRSA } from '@/config' const state = { currentUser: null, account: '', isRefreshToken: false, loginValue: {}, loginStatus: true, } const getters = { token() { return state.currentUser && state.currentUser.token }, userId() { return state.currentUser && state.currentUser.userId }, } const actions = { loginByPrincipal({ commit }, data) { return new Promise((resolve, reject) => { if (loginRSA) { const { password } = data data['password'] = encryptedData(password) } authentication(data.params, data.tenantId) .then((res) => { resolve(res) if (res.errorCode && res.errorCode === '2002') { commit('setLoginValue', res.value) return } if (res.errorCode && userInfo.errorCode === '2001') { commit('setLoginValue', res.value) return } commit('setLoginStatus', res.loginStatus) commit('setCurrentUser', res) commit('setAccount', res.account) storage.session.set('currentUser', res) }) .catch((err) => { reject(err) }) }) }, validAndCompletedCurrent({ commit, state }, token) { return new Promise((resolve, reject) => { if (state.currentUser && !token) { resolve() } else { const user = storage.session.get('currentUser') if (user && !token) { commit('setCurrentUser', user) commit('setAccount', user.account) resolve() } else if (token) { basicSso(token) .then((res) => { storage.session.set('currentUser', res) commit('setCurrentUser', res) commit('setAccount', res.account) resolve() }) .catch(() => { reject() }) } else { reject() } } }) }, refreshAndGetAuthenticationToken({ commit, state }) { if (state.isRefreshToken) { return } commit('isRefreshToken', true) return new Promise((resolve, reject) => { refreshAndGetAuthenticationToken().then( (user) => { if (user) { sessionStorage.setItem( 'currentUser', JSON.stringify(state.currentUser) ) commit('refreshToken', user.token) setTimeout(() => { commit('isRefreshToken', false) }, 3000) resolve() } }, (msg) => { reject(msg) } ) }) }, logoutAndCleanUp({ commit, state }) { return new Promise((resolve, reject) => { logout().finally(() => { sessionStorage.removeItem('currentUser') commit('clearCurrentUser') commit('user/setCurrentUserDetail', null, { root: true }) commit('user/setCurrentUserOrg', null, { root: true }) resolve() }) }) }, //token过期后,执行本方法,不需要请求后台登出 clearCurrentUser({ commit, state }) { sessionStorage.removeItem('currentUser') commit('clearCurrentUser') commit('user/setCurrentUserDetail', null, { root: true }) commit('user/setCurrentUserOrg', null, { root: true }) }, } const mutations = { setLoginStatus(state, loginStatus) { state.loginStatus = loginStatus }, setLoginValue(state, loginValue) { state.loginValue = loginValue }, isRefreshToken(state, status) { state.isRefreshToken = status }, refreshToken(state, token) { state.currentUser.token = token state.currentUser.loginTime = new Date().getTime() }, setCurrentUser(state, current) { state.currentUser = current //把token传给app应用进行保存 window.uni && // eslint-disable-next-line no-undef uni.postMessage({ data: { action: 'login', token: current.token, }, }) }, clearCurrentUser(state) { state.currentUser = null }, setAccount(state, account) { state.account = account }, } export default { namespaced: true, state, getters, actions, mutations, }