token有⼀定的失效性,过期了该怎么做?
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有⼀定的失效性,过期了该怎么做?的更多相关文章
- 从NSTimer的失效性谈起(二):关于GCD Timer和libdispatch
一.GCD Timer的创建和安放 尽管GCD Timer并不依赖于NSRunLoop,可是有没有可能在某种情况下,GCD Timer也失效了?就好比一開始我们也不知道NSTimer相应着一个runl ...
- K均值聚类的失效性分析
K均值聚类是一种应用广泛的聚类技术,特别是它不依赖于任何对数据所做的假设,比如说,给定一个数据集合及对应的类数目,就可以运用K均值方法,通过最小化均方误差,来进行聚类分析. 因此,K均值实际上是一个最 ...
- 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~
一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...
- JWT生成token及过期处理方案
业务场景 在前后分离场景下,越来越多的项目使用token作为接口的安全机制,APP端或者WEB端(使用VUE.REACTJS等构建)使用token与后端接口交互,以达到安全的目的.本文结合stacko ...
- Token过期处理
Token用于进行接口鉴权,但是Token具有由后端设置的过期时间,当Token过期以后,就无法再请求数据了 项目中后端设置的过期时间为24h,测试时我们可以手动修改token值让Token失效 处理 ...
- laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效
laravel jwt 做API 退出登录(注销) 该怎么弄? 如何让token失效 php框架 laravel 2.1k 次浏览 问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键 ...
- axios reponse请求拦截以及token过期跳转问题
前两天项目中遇到了token拦截,需要在请求的header头里放置token,需要用到response拦截,调试过程中遇到了拿不到token的问题 我用的axios实例 let token = sto ...
- Web API与OAuth:既生access token,何生refresh token
在前一篇博文中,我们基于 ASP.NET Web API 与 OWIN OAuth 以 Resource Owner Password Credentials Grant 的授权方式( grant_t ...
- .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩过webAPI,但是领导要求必须用这个(具体原因鬼知道),只好硬着头皮上了. 最近刚做完权限这一块,分享出来给大家.欢 ...
- WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
.NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制 项目背景是一个社区类的APP(求轻吐...),博主主要负责后台业务及接口.以前没玩 ...
随机推荐
- 【SQL】列转字符串函数
还是这个需求 主界面的列表表格是直接在后台用SQL查出来的 public String getQuerySql(ElemBean condition, List<Object> param ...
- JDBC详解学习笔记
JDBC简介 架构时--没有什么是加一层解决不了的,如果有,就再加一层. 如tomcat集群上面的Nginx,Nginx集群上面的LVS. JDBC是数据库驱动的接口规范,是SUN公司未来简化开发人员 ...
- (续) gym atari游戏的环境设置问题:Breakout-v0, Breakout-v4, BreakoutNoFrameskip-v4和BreakoutDeterministic-v4的区别
根据前文(https://www.cnblogs.com/devilmaycry812839668/p/14665072.html)我们知道: 首先是v0和v4的区别:带有v0的env表示会有25%的 ...
- 在vscode中通过修改launch.json文件为项目添加启动参数——在launch.json文件中修改args变量
以前一直在使用pycharm,不管怎么说毕竟国内外的Python编程者大部分都更支持pycharm,并且认为pycharm是Python语言编程中最好用的编辑器,但是随着国内编程人员一茬一茬的兴起很多 ...
- Ubuntu系统中CUDA套件nvvp启动后报错Failed to load module "canberra-gtk-module"
最近在看cuda方面的内容,需要对cuda代码做一些性能分析,于是需要使用nvvp,但是启动nvvp后报错:Failed to load module "canberra-gtk-modul ...
- 08-canvas绘制表格
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- Binance 如何使用 Quickwit 构建 100PB 日志服务(Quickwit 博客)
三年前,我们开源了 Quickwit,一个面向大规模数据集的分布式搜索引擎.我们的目标很宏大:创建一种全新的全文搜索引擎,其成本效率比 Elasticsearch 高十倍,配置和管理显著更简单,并且能 ...
- CH03_布局
第3章:布局 本章目标 理解布局的原则 理解布局的过程 理解布局的容器 掌握各类布局容器的运用 理解 WPF 中的布局 WPF 布局原则 WPF 窗口只能包含单个元素.为在WPF 窗口中放置多个元 ...
- 《重学Java设计模式》笔记——建造者模式
1. 建造者模式可以解决什么问题 我家里有各种形状的瓷器,盘子或者碗.虽然形状不同,但是所用的材料基本上是一样的,比如土.水.釉.彩这些基本的东西. 但是做不同款式的瓷器,方法是不同的.假如说我现在已 ...
- 如何将一个模块文件编译到Linux内核中?
很多粉丝在群里提问,如何把一个模块文件编译到内核中或者独立变异成ko文件.本文给大家详解讲解. 1. 内核目录 Linux内核源代码非常庞大,随着版本的发展不断增加.它使用目录树结构,并且使用Make ...