前提:由于公司架構(gòu)師整合,決定將用戶token放跨域cookie里面(axios設(shè)置withCredentials: true)施逾,前端就無需記錄token與用戶狀態(tài),由此對(duì)全局路由的邏輯的改變
關(guān)鍵:
用 【用戶信息】判斷用戶是否登錄,
沒有用戶信息時(shí)碘箍,獲取用戶信息(若已登錄獲取成功,沒有登錄或失效獲取不到用戶信息)鲸郊,
然后再進(jìn)入下一個(gè)路由
import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import getPageTitle from '@/utils/get-page-title'
NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/loginBms'] // no redirect whitelist
router.beforeEach(async(to, from, next) => {
// start progress bar
NProgress.start()
// set page title
document.title = getPageTitle(to.name)
// determine whether the user has logged in
const hasUserInfo = store.state.bmsUser.name
if(hasUserInfo){
if(to.path === '/loginBms'){
next({ path: from.path })
NProgress.done()
return false
}
next()
}else{
if(whiteList.includes(to.path)){
next()
return false
}
try {
await store.dispatch('bmsUser/getUserInfo')
const accessRoutes = await store.dispatch('bmsPermission/generateRoutes')
console.log('accessRoutes:',accessRoutes)
router.addRoutes(accessRoutes)
next({ ...to, replace: true })
} catch (error) {
next(`/loginBms?redirect=${to.path}`)
NProgress.done()
}
}
})
router.afterEach(() => {
// finish progress bar
NProgress.done()
})