Vue Router 无限重定向问题解决方法:路由守卫条件判断
router.beforeEach(async (to, from, next) => {\n const token = localStorage.getItem('token');\n const rolesLocal = sessionStorage.getItem('roles');\n const requiresAuth = to.meta.requiresAuth;\n const roles = to.meta.roles;\n\n // 如果该路由有权限且未登录,则跳转登录页面\n if (requiresAuth && !token && !roles) {\n alert("请先登录!");\n if (to.path === '/login') { // 如果当前路由是登录页面,则放行\n next();\n } else {\n next("/login");\n } \n } else {\n if (to.path === '/home' && rolesLocal === "admin" && rolesLocal !== "teacher" && rolesLocal !== "user") {\n next();\n } else if (to.path === '/teacherhome' && rolesLocal !== "admin" && rolesLocal === "teacher" && rolesLocal !== "user") {\n next();\n } else if (to.path === '/userhome' && rolesLocal !== "admin" && rolesLocal !== "teacher" && rolesLocal === "user") {\n next();\n } else {\n if (rolesLocal === "admin" && rolesLocal !== "teacher" && rolesLocal !== "user") {\n next("/home");\n } else if (rolesLocal !== "admin" && rolesLocal === "teacher" && rolesLocal !== "user") {\n next("/teacherhome");\n } else if (rolesLocal !== "admin" && rolesLocal !== "teacher" && rolesLocal === "user") {\n next("/userhome");\n } else {\n next();\n }\n }\n }\n})\n\n修改此代码解决无限重定向内容:可以尝试在路由守卫中添加一个条件,检查当前路由是否已经是需要跳转的目标路由,如果是,则不再重定向。\n\n修改后的代码如下:\n\njavascript\nrouter.beforeEach(async (to, from, next) => {\n const token = localStorage.getItem('token');\n const rolesLocal = sessionStorage.getItem('roles');\n const requiresAuth = to.meta.requiresAuth;\n const roles = to.meta.roles;\n\n // 如果该路由有权限且未登录,则跳转登录页面\n if (requiresAuth && !token && !roles) {\n alert("请先登录!");\n if (to.path === '/login') { // 如果当前路由是登录页面,则放行\n next();\n } else {\n next("/login");\n }\n } else {\n if (to.path === '/home' && rolesLocal === "admin" && rolesLocal !== "teacher" && rolesLocal !== "user") {\n next();\n } else if (to.path === '/teacherhome' && rolesLocal !== "admin" && rolesLocal === "teacher" && rolesLocal !== "user") {\n next();\n } else if (to.path === '/userhome' && rolesLocal !== "admin" && rolesLocal !== "teacher" && rolesLocal === "user") {\n next();\n } else {\n if (rolesLocal === "admin" && rolesLocal !== "teacher" && rolesLocal !== "user") {\n next("/home");\n } else if (rolesLocal !== "admin" && rolesLocal === "teacher" && rolesLocal !== "user") {\n next("/teacherhome");\n } else if (rolesLocal !== "admin" && rolesLocal !== "teacher" && rolesLocal === "user") {\n next("/userhome");\n } else {\n next();\n }\n }\n }\n})\n\n\n这样修改后,如果当前路由已经是目标路由,不会再次重定向,避免了无限重定向的问题。
原文地址: https://www.cveoy.top/t/topic/pRmc 著作权归作者所有。请勿转载和采集!