token 失效分为主动失效和被动失效

主动失效

就是自己设置函数检查token是否失效了,

主要步骤 ;1

  1.在登录的时候记录存储token的时间,

  2. 在request文件,设置一个函数,用来检查token是否过期

  3. 在请求拦截器记录当前的时间,并且引用函数主动检查token是否过期 ;

代码:

import axios from "axios";
import { Message } from "element-ui";
// 拿token有2种方式:方式1: 读取vuex的state; 方式2:读取cookie
import store from "@/store";
import router from "@/router";
import { getLoginTime } from "@/utils/auth";
// 主动检查token过期的方法
const tokenLongTime = 1000 * 60 * 60 * 2;
// const tokenLongTime = 1000 * 5;
function checkTimeOut() {
let curTime = Date.now(); // 发生请求的时间
let loginTime = getLoginTime(); // 登录当时的时间
if (curTime - loginTime > tokenLongTime) {
return true; // 过期了
} else {
return false; // 没有过期
}
} // 创建了一个新的axios实例
const service = axios.create({
// 读取环境变量文件里面的VUE_APP_BASE_API作为基准地址
baseURL: process.env.VUE_APP_BASE_API, // 接口基准地址
timeout: 5000, // 超时时间
}); // 请求拦截器
service.interceptors.request.use(
(config) => {
// 一定要return config,否则请求发生不出去
if (store.getters.token) {
// 有token,才判断是否过期
if (checkTimeOut()) {
Message.error("token过期,请重新登录");
store.dispatch("user/quitAction");
router.push("/login");
return Promise.reject("token过期,请重新登录");
}
// 没有过期就携带上
config.headers.Authorization = "Bearer " + store.getters.token;
}
return config;
},
(error) => {
return Promise.reject(error);
}
); // 响应拦截器 【解构数据,集中的错误处理,token过期】
service.interceptors.response.use(
(response) => {
// 一定要return,否则请求方法那边拿不到数据
const { success, code, data, message } = response.data;
if (success) {
// 业务成功
return data;
} else {
// 业务失败
Message.error(message);
return Promise.reject(message);
}
},
(error) => {
console.log("请求错误");
if (
error.response &&
error.response.data &&
error.response.data.code === 10002
) {
// token过期了
store.dispatch("user/quitAction");
router.push("/login");
Message.error("token过期,请求重新登录");
} else {
Message.error("请求异常");
}
// 请求错误
return Promise.reject(error);
}
);
// 暴露
export default service;

被动失效

就是让后端返回给我们数据,比如返回 401 就是token 过期 ,我们在响应拦截器做tokne过期的对应处理 ;

我这边采取的是被动失效,主要是后端失效之后会返回前端⼀个401的状态码,我们可以在axios的响应 拦截器⾥,去获取这个状态,如果发现是401就清理⼀下过去的token,然后重新跳转到登录⻚,获取有 效token,还有一个逻辑不是去跳转登录页,而是使用长refresh_token去获获取更新 token 然后把token 保存的vuex ,接着重新拿着新的config 配置项信息请i去数据,如果 refresh_token页过期了,就重新登录 ;

具体的代码:

https://www.cnblogs.com/zhulongxu/p/16810541.html

token有⼀定的失效性,过期了该怎么做?的更多相关文章

  1. 从NSTimer的失效性谈起(二):关于GCD Timer和libdispatch

    一.GCD Timer的创建和安放 尽管GCD Timer并不依赖于NSRunLoop,可是有没有可能在某种情况下,GCD Timer也失效了?就好比一開始我们也不知道NSTimer相应着一个runl ...

  2. K均值聚类的失效性分析

    K均值聚类是一种应用广泛的聚类技术,特别是它不依赖于任何对数据所做的假设,比如说,给定一个数据集合及对应的类数目,就可以运用K均值方法,通过最小化均方误差,来进行聚类分析. 因此,K均值实际上是一个最 ...

  3. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  4. JWT生成token及过期处理方案

    业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...

  5. Token过期处理

    Token用于进行接口鉴权,但是Token具有由后端设置的过期时间,当Token过期以后,就无法再请求数据了 项目中后端设置的过期时间为24h,测试时我们可以手动修改token值让Token失效 处理 ...

  6. laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效

    laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效 php框架 laravel 2.1k 次浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键 ...

  7. axios reponse请求拦截以及token过期跳转问题

    前两天项目中遇到了token拦截,需要在请求的header头里放置token,需要用到response拦截,调试过程中遇到了拿不到token的问题 我用的axios实例 let token = sto ...

  8. Web API与OAuth:既生access token,何生refresh token

    在前一篇博文中,我们基于 ASP.NET Web API 与 OWIN OAuth 以 Resource Owner Password Credentials Grant 的授权方式( grant_t ...

  9. .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制

    项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...

  10. WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制

    .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制 项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩 ...

随机推荐

  1. 03 OLED显示屏实现

    目录 前言 一.软件模拟IIC协议 1.开启IIC协议 2.结束IIC协议 3.传输数据 二.OLED的操作 1.传输数据的准备 2.写入命令 3.写入数据 4.初始化函数 5.设置光标 6.显示字符 ...

  2. 【Java】使用Druid连接池的监控面板排查慢SQL

    默认在后台服务的地址: http://localhost:8078/druid/login.html 账号信息放在配置文件中获取: server: port: 8078 spring: datasou ...

  3. OpenAI —— CLIP: Connecting text and images

    项目地址: https://openai.com/index/clip Github代码地址: https://github.com/openai/CLIP

  4. 【转载】 NLP如此钟情英语研究真的好吗?

    转载自: https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_965090611243366 ...

  5. Python Pillow(PIL 第三方模块)和 cv2 (opencv第三方模块)对图片的 resize 操作 (缩放图片大小)

    PIL 模块的 resize  操作: 1.  从文件中读取图片,然后  resize  大小: import matplotlib.pyplot as plt import numpy as np ...

  6. csv或excel文件通过plsql导入到oracle数据库中

    1.背景 实际开发中经常遇到将数据直接导入到数据库中,操作如下 2.操作 第一步: 第二步:选择要导入的csv文件 第三步:选择数据库表字段与csv的列对应,然后点击导入,完成 完美!

  7. [POI2008] POC-Trains 题解

    前言 题目链接:洛谷. 时间复杂度和输入同阶的做法. 题意简述 有 \(n\)(\(n \leq 10^3\))个长 \(m\) 的字符串,\(q\)(\(q \leq 10^5\))次操作,交换两个 ...

  8. 【牛客刷题】HJ3 明明的随机数

    题目链接 这题有两个要编码解决的问题,首先是去重,其次是排序. 最开始想着就用Java的TreeSet解决了,简单好用,去重排序都一并解决了,编码只需要考虑input的逻辑就可以,代码如下: impo ...

  9. 【A GUIDE TO CRC ERROR DETECTION ALGORITHM】 (译文2)

    6. A Fully Worked Example 一个完全可行的例子 Having defined CRC arithmetic, we can now frame a CRC calculatio ...

  10. [nRF24L01+] 1. 硬件设计

    nRF24L01pluss_REFERENCE_MODULES.pdf nrf24l01p_product_specification_1_0.pdf 1. 硬件设计 1.1. 实物图 [左边是PCB ...