1.需求:
登录有两重(商户登录页,用户登录页):
-1- 先登录商户
-2- 登录商户成功之后,再登录用户
-3- 商户第一次登录之后以后就不需要再登录了,直接跳转到用户页面用户登录
2.已有代码
商户第一次登录,请求http,成功之后,保存值到vuex里面
this.axios.post('/api/user/login.do', qs.stringify({
username: this.username,
password: this.password,
type: 'pos_seller'
})).then(response => {
if (response.data.result === 'success') {
// this.$router.push('/login')
let user = {};
user.user_name = response.data.user.displayName;
user.user_token = response.data.user.userId;
this.setUser(user);//发送给vuex
}
}).catch(error => {
console.log("error====>" + error)
})
router里面:
router.beforeEach((to, from, next) => {
// console.log(store.state.currentUser.UserToken); // 有值
if (to.meta.requireAuth) {
let token = store.state.currentUser.UserToken;
if (token) {
if (to.path === '/login') {
console.log(to)
next('/login')
}
}
else {
next({
path: '/sellerlogin',
query: {redirect: to.fullPath}
})
}
}
else {
next();
}
})
3.结果:
点击商户登录,直接死循环,并且也不能达到预期效果(localStorage里面有值,自动跳转到用户登录页)
4.问题
-1- 上面的代码有啥问题
-2- 一般登录拦截是这样做的吗?我看到网上说还需要axios拦截,也就是说前端路由拦截+axios拦截?
axios有请求前拦截,和请求后拦截,对应着不同的拦截器,可以在任何请求前去判断是否登录,然后决定跳转页面。请求后拦截,用于对常规数据过滤,通用跳转、根据不同的状态码可及对应的业务场景,设置各种用法