zoukankan      html  css  js  c++  java
  • vue+axios 前端实现登录拦截(路由拦截、http拦截)

    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")
            })
        }
    
    请用今天的努力,让明天没有遗憾。
  • 相关阅读:
    Spring第三天:Spring的AOP的注解开发、Spring的声明式事务、JdbcTemplate
    Spring第二天:Spring的IOC的注解方式、Spring的AOP开发(XML)
    Spring第一天:Spring的概述、SpringIOC入门(XML)、Spring的Bean管理、Spring属性注入
    PHP变量的声明及其作用域
    p {font-family: "sans serif";}
    深入理解JavaScript位运算符
    Jquery ajax 解析加载XML文件
    php网站开发安全小常识
    简单的DOS攻击之死亡之ping详解
    php中GET和POST的区别
  • 原文地址:https://www.cnblogs.com/cupid10/p/13534650.html
Copyright © 2011-2022 走看看