使用vue-router的beforeEach进行权限拦截的无限循环问题

1,373 阅读1分钟

想实现用户未登录时无法访问其他页面的功能,登录时将token存在localStorage中,在router.js中使用beforeEach来判断,判断localStorage中是否有token,如果有跳转到下一个页面中,如果没跳转到登录页面。

router.beforeEach((to, from, next) => {
    if (localStorage.getItem("user_token")) {
        next();
    }
    else {
        next({
            path: '/login'
        })
    }
})

结果页面是空白的,打开控制台发现出现了死循环


因为还没有登录,获取到本地存储的user_token为null,所以一直重定向到登录页面,出现了死循环。

修改代码,判断如果要到登录页面去,允许直接跳转,不会再重定向到登录页面

router.beforeEach((to, from, next) => {
    if (localStorage.getItem("user_token")) {
        next();
    }
    else {
        if(to.path == "/login") {
            next();
        }
        else {
            next({
                path: '/login'
            })
        }
    }
})