if (hasToken) {
if (to.path === '/login') {
next({ path: '/' })
NProgress.done()
} else {
const hasGetUserInfo = store.getters.name
if (hasGetUserInfo) {
next()
} else {
try {
await store.dispatch('user/getInfo')
next()
} catch (e) {
await store.dispatch('user/resetToken')
Message.error(error || 'Has Error')
next(`/login?redirect=${to.path}`)
NProgress.done()
}
}
}
} else {
if (whiteList.indexOf(to.path) !== -1) {
next()
} else {
next(`/login?redirect=${to.path}`)
NProgress.done()
}
}
const hasGetUserInfo = store.getters.user;
if(to.meta.auth){
if(hasGetUserInfo){
next();
} else {
const hasToken = localStorage.getItem('adminToken');
if(hasToken){
try{
await store.dispatch('user/getInfo');
next();
} catch(error){
await store.dispatch('user/resetToken');
Message.error('登录过期,请重新登录');
next(`/login?redirect=${to.path}`);
NProgress.done();
}
} else {
next(`/login?redirect=${to.path}`);
NProgress.done();
}
}
} else {
if(to.path === '/login' && hasGetUserInfo){
next({path : '/'})
} else {
next();
}
NProgress.done();
}
store里的代码
const getDefaultState = () => {
return {
user : null
}
}
const state = getDefaultState()
const mutations = {
SET_USER:(state, payload) => {
state.user = payload;
}
}
const actions = {
login({ commit }, userInfo) {
return new Promise((resolve, reject) => {
loginApi(userInfo).then(res => {
const { data } = res;
if (data) {
commit('SET_USER', data);
resolve();
} else {
reject(res)
}
}).catch(error => {
reject(error);
})
})
},
getInfo({ commit, state }) {
return new Promise((resolve, reject) => {
getInfo().then(res=>{
if(typeof res === 'string') {
res = JSON.parse(res);
if (res.code === 401) {
reject(res.msg);
}
} else {
commit('SET_USER', res.data);
resolve()
}
})
})
},
}
request请求拦截的截图