1、网站一般只要登陆过一次后,接下来该网站的其他页面都是可以直接访问的,不用再次登陆。我们可以通过 token 或 cookie 来实现。(token权限控制(在用户访问路由前,确认该访问用户是否进行过登陆操作,禁止通过路由直接非法进入页面访问))
2、全局前置守卫在路由刚开始导航且还未进入路由对应的组件中时触发,简单来说即最早触发,但是触发时候没有任何组件等加载,正因为如此适合做登陆判断逻辑。当一个导航触发时,全局前置守卫按照创建顺序调用,守卫是异步解析执行,此时导航在所有守卫resolve完之前一直处于等待中。
import router from './index'
import storejs from 'storejs'
router.beforeEach((to, from, next) => {
const token = storejs('token')
if (token) {
if (to.name === 'login') {
next('/home')
} else {
next()
}
} else {
if (to.name === 'login') {
next()
} else {
next('/login')
}
}
})
需注意:在全局前置守卫内是不能访问到this的
3、在响应拦截器内做处理,如果返回的状态码为401,表示当前登陆用户无权限访问,即回退到登录页面,并且清空本地的token存储
service.interceptors.response.use(response => response, (error) => {
if (error.response.status === 401) {
storejs.remove('token');
router.replace('/login');
}
});