vue+axios新手实践实现登陆的示例代码

2020-06-14 06:16:24易采站长站整理

if (token) { // 通过vuex state获取当前的token是否存在
next()
} else {
console.log('该页面需要登陆')
next({
path: '/login'
// query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
})
}
} else {
next()
}
})

export default router

这里我用到router.beforeEach来实现拦截登陆,

1、在需要验证的路由的meta里加入我们自己的requireAuth
2、router.beforeEach里通过requireAuth验证该组件是否需要登陆
3、验证token如果为flase就表示未登陆跳转到登录页

axios发送请求


submitLogin () {
this.$refs.loginForm.validate(valid => {
if (valid) {
axios.post('/login', {
user: this.loginForm.user,
pass: this.loginForm.pass
})
.then((response) => {
if (response.status === 200) {
this.$store.commit('SET_TOKEN', response.data.token)
this.$store.commit('GET_USER', response.data.user)
this.$message({
message: '登陆成功',
type: 'success'
})
this.$router.push({name: 'activity'})
}
})
.catch(function (error) {
console.log(error)
})
} else {
console.log('error submit!!')
return false
}
})
},

后台我没写,是用mock.js拦截ajax请求

因为我用的是element-ui所以上面代码有一些直接无视,看核心的就行

1、在数据返回成功后用this.$store.commit来更新vuex里的数据

2、登陆成功后跳转this.$router.push()跳转页面,

这里注意,如果你在前面导航拦截的钩子用了query: {redirect: to.fullPath}的话,这里就 用 this.$router.push(this.$route.query.redirect);这样页面就能跳到

你跳到登陆页面前要去的那个路由了