先在登录
的路成功后获取token将token存储本地
change() {
//对表单对整体合法性验
this.$refs.ruleForm.validate(async valid=>{
//如果表单又不合法的字段,直接返回
if(!valid)return;
const res=await login(this.ruleForm)
console.log(res);
//登录成功之后的步骤
// 第一步:存储token
sessionStorage.setItem('token',res.token)
console.log(this.$route.query);
//跳转页面
let {redirect}=this.$route.query//获取url地址栏上填写的要去的页面
console.log(redirect);
if(redirect){//登录后有要去的也面就去要去的也面否则就去/home页面
this.$router.push({path:redirect})
}else{
this.$router.push({path:'/home'})
}
})
},
第一步先在路由设置meta里面设置一个状态type为true
{
path: "/Home",
name: "Home",
component: Home,
meta: { type: true }
},
第二步在路由里使用router.beforeEach循环路由,里面有三个参数地一个是to,form,next,使用some循环每个路由里有没有type这个状态,循环出有这个状态赋值给变量type使用这个变量判断用不用授权用授权的话获取token用token判断本地存储没有token就去login页面,有token,就直接放行去要去的页面,
router.beforeEach((to, form, next) => {
console.log('to', to.matched.some);
let type = to.matched.some(item=>item.meta.type)//循环路由
// 判断路由用不用授权
if (type) {
//用授权的话获取token
let token = sessionStorage.getItem('token')
//判断本地存储没有token就去login页面
if (!token) {
return next({
//要跳转的路由
path: '/login',
//通过query携带要传递的参数,query是一个对象
query: {
redirect: to.fullPath
}
})
}
//有token,就直接放行
next()
}else{
//判断路由不用授权去的页面
next()
}
})