问题描述
用户未登录状态,访问http://localhost:23001/任何URI
时,会被导向去http://localhost:23001/任何URI#/login
,此时在beforeEach
里打印to.name
为home
。然后
比如:
-
http://localhost:23001/register
会变成http://localhost:23001/register#/login
-
http://localhost:23001/reset-password
会变成http://localhost:23001/reset-password#/login
问题出现的环境背景及自己尝试过哪些方法
利用vue-router的beforeEach这个全局钩子,设置导航保护,将未登录用户导向去登录页。
- 用户登录时,访问主页
http://localhost:23001/
,会被导向去http://localhost:23001/#/
- 用户未登录时,访问主页
http://localhost:23001/
,会被导向去http://localhost:23001/#/login
相关代码
const no_auth_required_pages = ['login', 'register', 'reset-password'];
const routes_config = [
{
path: '/',
name: 'home',
component: Home,
meta:{
requiresAuth: true
}
},
{
path: '/login',
name: 'login',
component: Login
},
{
path: '/register',
name: 'register',
component: Register
},
{
path: '/reset-password',
name: 'reset-password',
component: ResetPassword
}
];
const router = new VueRouter({
routes: routes_config
});
router.beforeEach(function (to, from, next) {
if (to.meta.authRequired) {
if (localStorage.getItem('token')) {
next();
} else {
if (no_auth_required_pages.indexOf(to.name) === -1) {
next({path: '/login'});
} else {
next();
}
}
} else {
next();
}
});
你期待的结果是什么?实际看到的错误信息又是什么?
- 想知道URL里面那个#的作用
- 为什么转向的时候不会把hash前面的路径名称覆盖,而是在
#/
后面直接添加
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…