【发布时间】:2020-05-20 10:15:01
【问题描述】:
(我是 Vue 新手) 我在我的路由器上实现了一个导航保护,它在从另一条路线导航时工作。守卫将用户导航到拒绝访问页面。此时导航菜单仍然从拒绝访问页面可见,这意味着用户可以尝试再次加载他们被拒绝访问的页面。如果用户确实尝试这样做,他们之前被拒绝访问的页面会加载,我想阻止这种情况发生。似乎以某种方式绕过了警卫?
谢谢
if (to.matched.some(record => record.meta.requiresAuth) && !loggedIn) {
next({name: 'login'});
} else if (to.matched.some(record => record.meta.roles)) {
var userRoles = JSON.parse(loggedIn).roles;
to.meta.roles.forEach(function (role) {
if (userRoles.includes(role))
next();
});
next({ name:'accessdenied'});
}
路由器入口:-
{
path: '/pageA',
name: 'pageA',
component: pageA,
meta: { requiresAuth: true, roles: ['role1', 'role2'] },
beforeEnter(routeTo, routeFrom, next) {
store.dispatch('fetchSomeData').then(() => {
next()
})
}
导航条目:-
<router-link :to="{name: 'pageA'}">
<h1 class="mb-0 h5 ml-4 z-app-header-title">Page A</h1>
</router-link>
【问题讨论】:
-
我不明白你的意思,所以你说当他们已经在 AccessDenied 页面上,并且他们点击导航菜单时,该页面将再次加载 AccessDenied 页面,你不想要吗?
-
对不起,没有。因此,他们尝试加载“页面 a”,但他们无权访问并被发送到“拒绝访问”。顶部有一个菜单,他们可以单击链接再次加载“页面 a”。如果他们点击它,它就会加载。就好像它以某种方式绕过了守卫。我在想我的路由器代码一定是不正确的,它认为它已成功加载“页面 a”或其他东西,并且没有第二次检查。但我仍然在掌握 Vue。谢谢
-
对于这段代码,它对所有变量都不是很清楚,您能否发布更多路由器 js 文件的代码,以及导航菜单,特别是与用户角色相关的部分(如果有)。外面可能有一些错误
标签: vue.js vue-router