我是一个单页应用程序的vue路由器,我已经在路由器中实现了几个保护。我注意到,如果一个防护程序将我重定向到我实际所在的同一个页面,afterEach()
函数不会触发。
让我给你举个例子。假设您有以下流程:我在登录页面;我使用我的凭据,然后重定向到主页。在这里,我单击"返回"按钮返回登录页面,但一个检查我是否已经登录的警卫会将我重定向回主页。在这种情况下,afterEach()
函数不会触发。
我该如何解决这个问题?
此解决方案不适用于所有情况,但如果您在路由器的beforeEach
挂钩中实现额外的手动导航保护,则它可以适用于您提到的示例。
假设您有以下代码,其中用户尝试从/home
导航到/login
,并最终返回到/home
而不触发afterEach
挂钩:
router.beforeEach((to, from, next) => {
if (user.isAuthenticated() && to.path === '/login') {
return next('/home')
}
return next()
})
router.afterEach(() => {
// some logic
})
将其重新转换为:
const afterEach = function() {
// some logic
}
router.beforeEach((to, from, next) => {
if (user.isAuthenticated() && to.path === '/login') {
if (from.path === '/home') {
afterEach()
}
return next('/home')
}
return next()
})
router.afterEach(afterEach)