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. 为团队配置Linux环境,简单高效的项目共享方案

    前言 最近好久没写博客了,事情太多了,我还搞了个新的好玩的项目,等后续做得差不多了来写篇文章介绍一下. 在我们目前的AI项目中,团队需要共同使用一台GPU服务器来做模型训练和数据处理.为了让每个团队成 ...

  2. 【ElasticSearch】01 CRUD操作

    1.资料: ES官网最新版本下载地址: https://www.elastic.co/cn/downloads/elasticsearch 历史版本下载: https://www.elastic.co ...

  3. 强化学习 —— reinforce算法中更新一次策略网络时episodes个数的设置对算法性能的影响 —— reinforce算法中迭代训练一次神经网络时batch_size大小的不同设置对算法性能的影响

    本文相关的博客:(预先知识) 强化学习中经典算法 -- reinforce算法 -- (进一步理解, 理论推导出的计算模型和实际应用中的计算模型的区别) 本文代码地址: https://gitee.c ...

  4. 零基础学习人工智能—Python—Pytorch学习(二)

    前言 数学的学习跟数学的计算是要分开的,现在回头再去看大学的高数和线性代数,如果只是学习的话,其实一门课程3天,也就学完了. 学校的课程之所以上那么久,其实是为了考试,也就是为计算准备的.计算有意义的 ...

  5. Android网页投屏控制从入门到放弃

    背景 业务需要采集在app上执行任务的整个过程,原始方案相对复杂,修改需要协调多方人员,因而考虑是否有更轻量级的方案. 原始需求: 记录完成任务的每一步操作(点击.滑动.输入等) 记录操作前后的截图和 ...

  6. spring同时集成mybatis和ibatis

    最近来了一个新项目,说是新的项目,但是需要用到以前旧的模块代码,旧的模块使用架构为ssi 而新项目使用spring mvc +mybatis,考虑到工作量的问题,所以决定使用spring mvc +m ...

  7. 通过 ob-operator 部署 OceanBase 数据库

    本文介绍如何通过 ob-operator 来部署 OceanBase 数据库. 背景信息 ob-operator 与其他 operator 一样,旨在让 OceanBase 以容器的方式,无缝运行在 ...

  8. Polly服务熔断

    //自定义异常 public class MyException : Exception { public MyException(string? message) : base(message) { ...

  9. WPF 如何利用Blend给Button添加波纹效果

    先看一下效果吧: 如果不会写动画或者懒得写动画,就直接交给Blend来做吧; 其实Blend操作起来很简单,有点类似于在操作PS,我们只需要设置关键帧,鼠标点来点去就可以了,Blend会自动帮我们生成 ...

  10. 构建 OpenWrt

    OpenWrt 是一款路由器操作系统.如果你想要给自己的路由器安装 OpenWrt 的话,一般来说使用别人已经构建好的 OpenWrt 固件就够用了.当然如果你闲得没事干,那么也可以自己构建固件. P ...