您的位置:首页 > Web前端 > Vue.js

vue+axios 前端实现登录拦截(路由拦截、http拦截)

2020-08-20 14:12 190 查看

vue+axios 前端实现登录拦截(路由拦截、http拦截)

在项目中,有些页面往往需要登录后才可以浏览,那么我们可以通过路由拦截进行处理

在vue.config.js中配置代理,解决前端浏览器的跨域问题

devServer: {
overlay: {
warnings: false,
errors: false
},
open:true, //自动开启浏览器
port:8000, //端口号设置
proxy: {   //配置代理  解决前端浏览器的跨域问题
'/info': {
target: 'http://47.96.0.211:3000',  //目标请求的域名地址
changeOrigin:true,               //是否改变
pathRewrite:{                    //重写地址
"^/info":""
}
}
}
},

我们可以单独建一个http.js的文件,对拦截进行封装

请求之前的拦截 一般可以在发送请求给后端的时候,携带一些数据给他们
响应之后的拦截 可以根据响应后的不同的状态码进行判断分析,给前端返回不同的符和条件的数据

//关联之前的域名地址
const instance2 = axios.create({
baseURL: '/info',
})

//在发生请求之前做一个拦截操作
instance2.interceptors.request.use(config=>{
// 只要调用此接口的地方,就在他的请求头上面携带token发送给后端
if(localStorage.getItem("token")){
config.headers['X-Access-Token'] = localStorage.getItem("token")
}
return config
})

//获取数据后,后端给我们进行响应,做一个拦截,根据返回的状态码进行业务逻辑实现,从而给前端返回不同的数据内容。
instance2.interceptors.response.use(res=>{
if(res.data.flag){ //代表后端成功响应结果了
return res.data.data
}else{
return Promise.reject("出错了...")
}
})

在登录页面login.vue

methods:{
login(){
instance2.post("/api/user/loginin",{
username:"admin",
password:123
}).then(res=>{
//登录成功后,需要将后端返回的token令牌放入到本地存储里面
localStorage.setItem("token",res.token)
//跳转到个人中心
this.$router.push("/center")
}).catch(err=>{
//如果登录不成功,输出错误提示
console.log(err)
})
}
}

个人中心center.vue设置

//个人中心内部beforeRouteEnter进行组件内部的路由守卫的拦截,进入组件之前先判断本地存储是否有token令牌,发现如果本地存储里面有了token令牌了,那么就next() , 否则 next("/login")
beforeRouteEnter(to,from,next){
if(localStorage.getItem("token")){
next()
}else{
next("/login")
}
},
created(){
//进行接口请求,为了检测token是否处于失效状态
instance2({
method:"post",
url:"/api/user/isloginin",
}).then(res=>{
console.log("centerres-->",res)
}).catch(err=>{ //token已经失效了,需要跳转到登录界面进行重新登录
this.$router.push("/login")
})
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: