闲话少说,给出我的一个解决方案
1.在响应拦截器处,判断服务器那边token过期的code码
2.用户重定向到login页面处,并携带当前页面的url当作参数
//这里的跳转应该是token过期后,在强制用户跳转到登陆页面时,携带一个参数(lastPath)
window.location.replace(
`/login?from_url=${route.currentRoute.value.fullPath}`,
);
3.在用户登陆成功后,跳转到默认首页前,判断是否携带有lastPath这个参数,
如果有说明用户是重新登陆
如果没有说明用户第一次登陆,给他跳转到默认的首页即可
但是又引出了另一个需求,我们希望用户如果是点击的别人的网址进入的例如(http:xxxx.com/a/b)但是用户没有权限,重登后让它去往它希望的页面,而不是默认首页
我们在路由全局守卫中进行判断
//第一重判断是防止用户在登陆页面
//第二冲if则是判断用户此时的url是不是单纯的访问网址,如果不是,说明用户是通过点击他人的链接前来访问的,此时我们就可以携带上这个url
if (!to.matched.some(item => item.name === 'Landing')) {
// 用户通过url首次进入页面, 没有授权, 不需要强制跳转
if (from.name === undefined) {
// 用户进入空路由地址
if (window.location.pathname === '/') {
next({ name: 'Login' });
} else {
// 用户点击其他页面,但没有权限,强制跳转到login,并且携带希望访问的参数
next({ name: 'Login', query: { from_url: to.fullPath } });
}
} else {
resetToLogin();
}
} else {
next();
}