router.beforeEach((to, from, next) => { const sessionId = document.cookie.replace( /(?:(?:^|.*;\s*)sessionId\s*=\s*([^;]*).*$)|^.*$/, "$1" ); if (sessionId) { next(); } else if (to.path === '/register') { next(); } else { next('/register'); } });这个刷新还是会返回登录页,依据这个判断登陆后刷新页面不返回登录页,需要加别的条件吗
时间: 2023-08-13 14:06:07 浏览: 410
是的,你的代码在刷新页面时会失去保存在`document.cookie`中的`sessionId`,因此会重新跳转到登录页。为了解决这个问题,你可以考虑使用`localStorage`或`sessionStorage`来保存`sessionId`,这样刷新页面后仍然可以获取到它。
以下是修改后的代码示例:
```javascript
router.beforeEach((to, from, next) => {
const sessionId = sessionStorage.getItem("sessionId");
if (sessionId) {
next();
} else if (to.path === '/register') {
next();
} else {
next('/register');
}
});
```
在登录成功后,将`sessionId`保存到`sessionStorage`中:
```javascript
await axios.post("/tax/wechat/login", postData).then((response) => {
console.log(response);
const sessionId = response.headers["ssessionid"];
sessionStorage.setItem("sessionId", sessionId);
console.log(sessionId);
if (response.data.success) {
this.$router.push("/profile");
} else {
this.$router.push("/authentication");
}
});
```
这样,在刷新页面后,就可以从`sessionStorage`中获取到`sessionId`,并继续导航而不是返回到登录页。
请注意,使用`sessionStorage`会使数据在会话结束后失效,如果需要长期保存数据,可以考虑使用`localStorage`。另外,建议在处理敏感信息时,确保对安全性和隐私进行适当的考虑和措施。
阅读全文