美文网首页
(二十)VueCli3.0全栈——路由守卫和token过期处理

(二十)VueCli3.0全栈——路由守卫和token过期处理

作者: 彼得朱 | 来源:发表于2019-07-10 14:59 被阅读0次

1、路由守卫

路由守卫:当我们没有登录页面之前,我们访问一些页面都不会真实地进入到里面去。

  • 修改router.js (client/src/router.js)
import Vue from 'vue'
import Router from 'vue-router'
import Index from './views/Index.vue'
import Register from './views/Register'
import Login from './views/Login'
import NotFound from './views/404'
Vue.use(Router)

// router接收
 const router = new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path:'/',
      redirect:'/index'
    },
    {
      path:'/index',
      name:'index',
      component:Index
    },
    {
      path:'/register',
      name:'register',
      component:Register
    },
    {
      path:'/login',
      name:'login',
      component:Login
    },
    {
      path:'/*',
      name:'404',
      component:NotFound
    }
  ]
})

// 路由守卫
router.beforeEach((to, from, next) => {
  // 判断localstorage里面是否有token
  const isLogin = localStorage.eleToken ? true : false;
  
  if(to.path == "/login" || to.path == "/register"){
    next();
  }else{
    // 如果为真,正常跳转,否则跳到登录页面
    isLogin ? next():next('/login');
  }


})

export default router;

用了一个const接收router,在跳转之前进行判断。若localstorage里面有登录时候的token,正常跳转,若没有,则跳转到登录页。

  • 测试

在开发者模式中把之前localstorage里面存储的eleToken清空,再次访问除登录注册的其他页面,会发现页面仍跳转到登录页。

测试路由守卫

成功实现了路由守卫。

2、Token过期处理

配置请求和响应拦截,在登录成功之后,我们应该将我们的token设置为请求头,然后在响应拦截的时候判断当前的token是否是过期的。如果过期,localstorage里面就得删掉过期token,如果没过期,需要token的接口就可以正常使用了。

​ 请求拦截:如果存在localStorage.eleToken,则设置为统一的请求头

​ 响应拦截:判断当前返回的状态码是不是401,如果是401,代表当前token失效,如果失效,需要把失效的token从localstorage里面删掉。

  • 完善请求响应拦截(client/src/http.js)

    import axios from 'axios';
    import {Message,Loading} from 'element-ui';
    import router from './router';
    
    let loading;
    
    function startLoading() {
        loading = Loading.service({
            lock: true,
            text: '拼命加载中...',
            background: 'rgba(0,0,0,0.7)'
        });
    }
    
    function endLoading() {
        loading.close();
    }
    // 请求拦截
    // 请求的时候需要加载动画
    axios.interceptors.request.use(
        config => {
        // 加载动画
        startLoading();
    
        if(localStorage.eleToken){
            // 设置统一的请求头
            config.headers.Authorization = localStorage.eleToken;
        }
    
        return config;
        }, 
        error => {
            return Promise.reject(error);
        }
    );
    
    //响应拦截
    axios.interceptors.response.use(
        response=>{
            // 结束加载动画
            endLoading();
            return response;
        },
        error=>{
            // 错误提醒
            endLoading();
            Message.error(error.response.data);
    
            // 获取错误状态码
            const {status} = error.response;
            if(status == 401){
                Message.error("token失效,请重新登录");
                // 清除token
                localStorage.removeItem("eleToken");
                // 跳转到登录页面
                router.push("/login");
            }
    
            return Promise.reject(error);
        }
    )
    
    
    export default axios;
    

相关文章

  • (二十)VueCli3.0全栈——路由守卫和token过期处理

    1、路由守卫 路由守卫:当我们没有登录页面之前,我们访问一些页面都不会真实地进入到里面去。 修改router.js...

  • 路由守卫和token

    1.直接进入index的时候,参数to被改变成了"/index",触发路由指向,就会跑beforeEach 2...

  • vue权限路由实现的方法示例总结

    使用全局路由守卫 实现 前端定义好路由,并且在路由上标记相应的权限信息 前端全栈学习交流圈:866109386,面...

  • 路由

    全局守卫就是每一个路径进来都会经过这个全局守卫的处理 单路由守卫就是把守卫指定给某一个路由 组件内路由就是把守卫放...

  • Token过期处理

    Token用于进行接口鉴权,但是Token具有由后端设置的过期时间,当Token过期以后,就无法再请求数据了项目中...

  • Vue实战第7天

    登录登出&& token login页面登录跳转到home页面,使用路由守卫拦截 通过user模块的action发...

  • vue的路由守卫

    路由守卫分3种:全局守卫路由独享守卫组件内的路由守卫 1.全局守卫:beforeEachbeforeResolve...

  • Android网络实战篇——(Retrofit+RxJava)单

    在上篇文章《Android网络实战篇——Token添加、过期判定以及处理》中探讨了Token的添加、过期判定以及R...

  • (二十一)VueCli3.0全栈——解析token并存储到vue

    本节主要内容:解析token里面的数据并存储到vuex中。 1、安装解析token的模块 到客户端 cd c...

  • vue的路由和路由守卫

    router 和 路由守卫 路由配置 分模块配置 404 配置 懒加载 active-class 路由守卫(跟 a...

网友评论

      本文标题:(二十)VueCli3.0全栈——路由守卫和token过期处理

      本文链接:https://www.haomeiwen.com/subject/mxjhkctx.html