思路:
- 首先判断路由如果跳转到登录页,直接next()【这里登录成功后,存储token至cookies】
- 判断当前页面是否有存贮的token:如果有,证明已经登录,执行next();没有就是未登录,此时需要重定向到登录页面。
这里在首次登陆的时候,控制台会报错。【他会判断是否有token,发送获取用户信息接口,此时没有登录即没有token,发送的接口或报错,401,没有访问权限】
router.beforeEach(async (to, from, next) => {
// 进度条加载
NProgress.start()
// 如果跳转到登录路由,直接放行
if (to.name === '登录') {
next()
return
}
// 获取token,用户名
// 这里的token是登录页登陆成功后,后端返回的值,并存储到cookies中
const hasToken = Cookies.get('adminToken')
// 获取用户信息并存贮到cookies 【这里使用的是pinia(大菠萝)】
const store = adminUserInfo()
const { data, error } = await store.getUserInfos()
// 判断:同时拥有token 和 userInfo,放行
if (hasToken && !error) {
Cookies.set('adminName', data.username)
next()
return
} else {
next('/login')
return
}
next()
})
next(): 进行管道中的下一个钩子next('/')或者next({ path: '/' })或者next({ name: 'Login' }): 跳转到一个不同的地址