zoukankan      html  css  js  c++  java
  • vue-router + axios token登录状态认证

    vue项目中登录状态判断往往基于jwt认证,我们可以采用判断本地是否存在token,及token是否过期或token值错误

    1.利用vue-router 钩子函数判断本地是否存在token

    import Vue from 'vue'
    import Router from 'vue-router'
    import HelloWorld from '@/components/HelloWorld'
    import home from '@/page/home'
    import store from '@/page/store'
    import login from '@/page/login'
    Vue.use(Router)
    
    const router = new Router({
      routes: [
        {
          path: '/home',
          name: 'home',
          component: home,
          meta: { requireAuth: true },
        },
         {
          path: '/login',
          name: 'login',
          component: login
        },
        {
          path: '/store',
          name: 'store',
          component: store,
          meta: { requireAuth: true },
        }
      ]
    })
    
    //判断是否登录
    router.beforeEach((to, from, next) => {
      if (to.matched.some(res => res.meta.requireAuth)) {
        if (localStorage.getItem('token')) {
          next()
        } else {
          next({
            path: '/login',
            query: { redirect: to.fullPath }
          })
        }
      } else {
        next()
      }
    });
    
    

    2.axios  存在token,但token已过期或token错误,基于axios请求后台进行判断

    import axios from 'axios';
    import router from '@/router';
    import { Loading, Message, MessageBox } from 'element-ui';
    // 超时时间
    axios.defaults.timeout = 5000;
    let loadinginstace;
    // 拦截请求
    axios.interceptors.request.use(function(config) {
      let token = localStorage.getItem("token");
      if (token) {
        config.headers["x-access-token"] = token;
      }
      loadinginstace = Loading.service({ fullscreen: true });
      return config;
    }, function(error) {
      loadinginstace.close();
      Message.error('加载超时');
      return Promise.reject(error);
    })
    
    // 拦截相应
    
    axios.interceptors.response.use(function(config) {
      if (config.data.msg == 'token信息错误或失效!') {
        MessageBox.confirm('token信息错误或失效,请重新登录!', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'info'
        }).then(() => {
          router.replace({
            path: 'login',
            query: { redirect: router.currentRoute.fullPath }
          })
        }).catch(() => {
    
        });
    
      };
      loadinginstace.close();
      return config;
    }, function(error) {
      loadinginstace.close();
      Message.error('加载超时');
      return Promise.reject(error);
    });

    以上2个步骤就可以实现项目的完整基于token登录状态信息的判断。

    完整项目demo贴上 github : https://github.com/zhuzeliang/node-vue-demo

  • 相关阅读:
    常用业务接口界面化 in python flask
    git命令中带有特殊符号如@
    生成唯一标识 字符串跟时间戳的结合
    MD5 in JAVA
    修改(同步)linux时间
    jenkins 从git拉取代码
    Git 默认不区分大小写
    postman也可以使用F12功能
    Session
    WebXML部署服务
  • 原文地址:https://www.cnblogs.com/zhuzeliang/p/9035053.html
Copyright © 2011-2022 走看看