千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > axios的请求拦截和vue路由的导航守卫有什么区别

axios的请求拦截和vue路由的导航守卫有什么区别

来源:千锋教育
发布人:syq
时间: 2022-08-11 10:49:50 1660186190

  在Vue项目中,有两种用户登录状态判断并处理的情况,分别为:导航守卫和axios拦截器。

axios的请求拦截

  1. 导航守卫:拦截组件

  · 导航守卫就是我们进行某些页面的时候需要判断当前用户是否登录过,如果登陆过,则可以跳转,否则重定向到登录页面

  · 导航守卫只是前端做出判断,检查请求头中是否带有token,并不能判断token是否失效

  · 每个守卫方法接收三个参数:

  o to: Route: 即将要进入的目标 路由对象

  o from: Route: 当前导航正要离开的路由

  o next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

  o next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

  o `next(false)`: 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

  o next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

  o next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

  o ps: 一定要确保要调用next

  // 添加路由守卫--导航守卫

    // 作用是通过判断来决定当前的路由跳转到底能不能进行

    // 这种守卫,只要进行路由的跳转就会自动的触发,不能人为调用

    router.beforeEach((to, from, next) => {

      // to:目标路由

      // from:源路由

      // next:下一步的操作,就是用户当前需要进行的操作

      console.log(to);

      // console.log(from);

      // 判断当前用户是否登陆,如果登陆了则可以跳转,否则重定向到登陆页

      // 获取用户登陆之后的token,进行token的判断

      if (to.path !== '/login' || to.path !== '/register') { // 非登录页面验证是否存在token

        let token = localStorage.getItem('token')

        if (token) {

          next()

        } else {

          Toast('请先登陆')

          // 说明没有登陆,则重定向到登陆页

          next({ name: 'login' })

        }

      } else {

        next()

      }

    })

  2. axios拦截器:拦截后端接口

  · 每次发送请求之前判断vuex或者本地存储中是否存在token

  · 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况

  · 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断

    // 添加请求拦截器

    // 每一个我们自己封装的axios请求都会经过这个拦截器

    axios.interceptors.request.use(function (config) {

        console.log(config)

        // 在发送请求之前做些什么:我要看看有没有token,如果有,则以请求头的方式进行传递

        let token = localStorage.getItem('token')

        if (token) {

          // 设置请求头

          config.headers.Authorization = token

        }

        return config;

      }, function (error) {

        // 对请求错误做些什么

        return Promise.reject(error);

    });

  3. 导航守卫和axios拦截器的区别

  · 导航守卫就是路由守卫,想进入一个页面时,判断是否有权限访问(有token,就有权限,没有就返回),但并不能判断是否失效。

  · axios拦截器是发送请求判断token的有效性,如果有就将token放在请求头里。

  · 导航守卫和axios拦截器一起使用,进而来确保登录的状态

  更多关于IT前端培训的问题,欢迎咨询千锋教育在线名师,如果想要了解我们的师资、课程、项目实操的话可以点击咨询课程顾问,获取试听资格来试听我们的课程,在线零距离接触千锋教育大咖名师,让你轻松从入门到精通。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT
开班信息
北京校区
  • 北京校区
  • 大连校区
  • 广州校区
  • 成都校区
  • 杭州校区
  • 长沙校区
  • 合肥校区
  • 南京校区
  • 上海校区
  • 深圳校区
  • 武汉校区
  • 郑州校区
  • 西安校区
  • 青岛校区
  • 重庆校区
  • 太原校区
  • 沈阳校区
  • 南昌校区
  • 哈尔滨校区