vue.js - 检查在 Vue js 中不起作用的路由上的 Auth
问题描述
我在 vue 路由上添加了身份验证,但它没有重定向回登录页面。
给出这个错误
Error: Navigation cancelled from "/" to "/pages/login" with a new navigation.
这是我在路线上应用的方式
router.beforeEach((to, from, next) => {
// If auth required, check login. If login fails redirect to login page
if (!(auth.isAuthenticated())) {
router.push({ path: '/pages/login', name: 'page-login', component: '@/views/pages/login/Login.vue' })
}
return next()
})
我认为它在循环内并且重定向太多次
解决方案
你说的对。您的警卫无限次推送到登录路线,因为router.beforeEach
在包括登录在内的每个路线导航中都会触发方法。为避免这种情况,您应该区分需要身份验证的路由和不需要身份验证的路由。您可以通过添加
meta: {requiresAuth: true,},
要保护的路线来做到这一点。这导致您的路线看起来像:
{
path: '/',
component: Home,
meta: {
requiresAuth: true,
},
}
if (to.matched.some((record) => record.meta.requiresAuth))
然后,您可以通过在方法中添加:条件来检查您要去的路线是否需要身份验证beforeEach
。这导致你的后卫看起来像:
router.beforeEach((to, from, next) => {
if (to.matched.some((record) => record.meta.requiresAuth)) {
if (!(auth.isAuthenticated())) {
router.push({ path: '/pages/login', name: 'page-login', component: '@/views/pages/login/Login.vue' })
}
} else {
next()
}
})
这将让您仅检查所需路由的身份验证,您可以通过添加来打破无限循环
meta: {
requiresAuth: false,
},
在您的登录路线上。
推荐阅读
- javascript - 在 React 本机应用程序的屏幕中对不同项目应用不同的动画
- php - 如何合并具有特定值的多维
- flask - 除了超时:什么会导致“MySQL 服务器已消失”错误?
- laravel - 如何获取选择控件的文本
- vba - 创建具有访问 VBA 和格式字段的表
- javascript - 如何使用 EVERY 定位所有将此属性设置为 FALSE 的项目
- java - MacOS Flink-1.8.0 WordCount.java 问题
- python - 迁移到 Django REST 框架
- python - 如何提高从数组或列表中删除所有被乘数的时间复杂度?
- html - 单击组合后会反映翻译,其中组合选项在 Angular 6 的 ngOnInit 中动态填充