首先,我在webpack上使用vuejs 2.0,vue路由(在历史模式下-SPA站点),vuex在webpack开发服务器上运行,并加载热模块.
我为组件绘制了大约10条路由.该网站运行得很好,但现在我添加了一些基于令牌的身份验证.我在用路由.在此之前,请执行令牌判断.如果 token 有效,应该让他们通过.如果令牌无效,它应该将它们重定向到/login页.问题是它第一次执行判断并对其进行限制.但第二次try 允许我进入页面并显示内容.每秒钟的请求似乎都能正确处理路由并重定向到/login.出于测试目的,我的checkToken()函数总是返回false.
代码:
// Configure Router
const router = new Router({
routes, //routes are configured elsewhere, they work fine so not needed
mode: 'history'
})
router.beforeEach((to, from, next) => {
if(to.path != '/login') {
if(checkToken()) {
logger('There is a token, resume. (' + to.path + ')');
next();
} else {
logger('There is no token, redirect to login. (' + to.path + ')');
next('login');
// next('/login');
// router.push('login');
}
} else {
logger('You\'re on the login page');
}
next();
});
function checkToken() {
return false;
}
转到主页("/"),它会按预期重定向到/login.在我的控制台中,我有以下两个条目:
[14:36:30.399]:没有令牌,重定向到登录.(/)
看起来不错.它试图加载"/"并看到没有令牌,然后重定向到/login,判断显示我们在登录页面上并停止.
现在我将点击我的Projects链接,这将带我到/project.控制台输出:
[14:40:21.322]:没有令牌,重定向到登录.(/项目)
很好,但实际上显示的是projects页,而不是login页.
现在我将点击我的Sites链接,它将带我到/site.控制台输出:
[14:41:50.790]:没有令牌,重定向到登录.(/站点)[
看起来不错,浏览器显示的是site页.这正是我想看到的.
现在我点击我的Requests链接到/request.控制台输出:
[14:44:13.114]:没有令牌,重定向到登录.(/请求)
但再一次,它不是重定向.我看到的是我的request页,而我应该看到我的login页.
这一次,我将再次点击我的Projects链接(/project),它错误地显示了project页而不是login页.控制台输出:
[14:47:12.799]:没有令牌,重定向到登录.(/项目)[
这一次,它将我的页面重定向到了/login页,这是它应该做的.
实际上,我点击的每一个链接都会被适当重定向,无论我点击的顺序或链接是什么.第一个重定向,第二个不重定向,第三个重定向,第四个重定向,第五个重定向,等等...
我试过next('/login')、next('login')和router.按一下("登录"),结果都一样.它知道什么时候应该重定向,但重定向只在每隔一段时间起作用.
如果我做了一个完整的请求(页面刷新,输入地址,然后按enter键),它总是会按照计划重定向到/login,但我正试图用SPA来实现这一点.我有什么遗漏吗?