1.在 存储 token 的时候说明登录了 此时 把时间戳记录一下  js-cookies - auth.js

// 导入 js-cookie 用于操作 cookies
import Cookies from "js-cookie"; const TokenKey = "hrsacc_admin_token";
// 时间
const LoginKey = "hrsass_login_time"; export function getToken() {
// 读取token
return Cookies.get(TokenKey);
} export function setToken(token) {
// 设置token 不要 return
// console.log("setToken(token)");
// 记录一下登录时候的时间戳
Cookies.set(LoginKey, Date.now());
Cookies.set(TokenKey, token);
} export function removeToken() {
// 删除 token
return Cookies.remove(TokenKey);
} // 读取登录的时间
export const getLoginTime = () => {
return Cookies.get(LoginKey);
};

2.请求拦截器触发说明发送了请求在把此时的时间戳记录下来 两者之差和token 保存时间比较就可以判断token是否过期

import { Message } from "element-ui";
import axios from "axios";
// 拿去token 有2中方式
// 1. 读取 vuex 的state
// 2. 读取cookies
import store from "@/store";
import router from "@/router";
import { getLoginTime } from "./auth"; /**
* 定义一个检查token 是否过期的方法
*/
// 2 个小时 7200000 ms 就是 时间戳 2 个小时 是 token 过期的时间期限
const tokenLoginTime = 1000 * 60 * 60 * 2;
function checkTimeOut() {
// 当前时间 发送请求的时间 在请求拦截器调用这个函数 就是发送请求的当前时间
const curTime = Date.now();
// 登录时候的时间
const loginTime = getLoginTime();
// 当前的时间 - 登录时候的时间 如果大于 2 小时 即 7200000 说明 token 过期了
if (curTime - loginTime > tokenLoginTime) {
// 过期了
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 否则请求发不出去
// 统一添加 token 只有 登录请求不需要 token 其余的请求都需要 token
if (store.getters.token) {
// token放在了 计算属性 getters 上面了??
console.log(
"请求拦截器 === 登录了 === 统一添加token === 是否过期了 ",
checkTimeOut()
);
// 每次请求接口的时候查看 token 是否过期了
if (checkTimeOut()) {
// 进来说明过期了
Message.error("token过期了,掉毛哦,重新登录把");
store.dispatch("user/quitAction");
router.push("/login");
return Promise.reject("token过期重新登录,promise.reject");
}
config.headers.Authorization = "Bearer " + store.getters.token;
}
return config;
},
(error) => {
// 发生请求失败
return Promise.reject(error);
}
);
/**
* 响应拦截器
*/
service.interceptors.response.use(
(response) => {
// 一定要return 否则请求的方法那边拿去不到任何疏忽 return什么我会获取什么数据
const { success, code, data, message } = response.data;
if (success) {
// 业务成功
Message.success("登录成功");
// console.log("业务成功");
return data;
} else {
// 业务失败
Message.error(message);
// console.log(message);
return Promise.reject(message);
}
},
(error) => {
// 请求错误
console.log("响应拦截器错误,token过期问题");
console.log(error);
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;

手动检查 token 是否过期的更多相关文章

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

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

  2. drf中的jwt使用与手动签发token、校验用户

    jwt认证 1)session存储token,需要数据库参与,耗服务器资源.低效2)缓存存token,需要缓存参与,高效,不易集群3)客户端存token,服务器存签发与交易token的算法,高效,易集 ...

  3. AD帐户操作C#示例代码(二)——检查密码将过期的用户

    本文接着和大家分享AD帐户操作,这次开发一个简单的检查密码将过期用户的小工具. 首先,新建一个用户实体类,属性是我们要取的用户信息. public class UserInfo { /// <s ...

  4. ThinkPHP中:检查Session是否过期

    1.创建Session public function index(){ $sess_time=time(); session('name','andy'); session('time_stamp' ...

  5. rstful登陆认证并检查session是否过期

    一:restful用户视图 #!/usr/bin/env python # -*- coding:UTF-8 -*- # Author:Leslie-x from users import model ...

  6. 29.Jwt集成(3):token设置过期时间、异常判断

    token设置过期时间 package main import ( "fmt" "github.com/dgrijalva/jwt-go" "io/i ...

  7. Vue刷新token,判断token是否过期

    1.判断token是否过期,前端请求后,后台会返回一个状态给你.根据状态判断是否过期,刷新token 2.是否每次请求后端都会返回新的token给你.或者后端给你定义了一个刷新token的方法,那此时 ...

  8. 八幅漫画理解使用JSON Web Token设计单点登录系统

    用jwt这种token的验证方式,是不是必须用https协议保证token不被其他人拦截? 是的.因为其实只是Base64编码而已,所以很容易就被解码了.如果你的JWT被嗅探到,那么别人就可以相应地解 ...

  9. 实现一个简单的基于Token的身份认证

    这个例子是基于客户端与webapi进行进行交互的身份认证,当然也适用于其他情况下的身份认证.   简单的交互过程: 1.首先输入用户名.密码进行登录操作 2.服务器验证用户名.密码的正确性,验证通过之 ...

  10. 简易 Token 验证的实现

    简易 Token 验证的实现 前言 在我们的服务器和客户端的交互中,由于我们的业务中使用 RESTful API 的形式和客户端交互,而 API 又是无状态的,无法帮助我们识别这一次和上一次的请求由谁 ...

随机推荐

  1. 【JS】02 基础语法

    JS的引入方式: 第一种: 就是我们在HTML标签中使用script标签,然后在这个标签中可以书写JS代码 type="text/javascript"  可以不用写,浏览器会根据 ...

  2. 【MySQL】29 索引

    MySQL是一个关系型的数据库 使用标准的SQL数据格语言格式 支持大型数据库,处理千万级别的记录数据 允许多系统运行,支持多种编程语言连接 最重要的一点是MySQL允许定制,采用GPL协议,允许修改 ...

  3. Continue-AI编程助手本地部署llama3.1+deepseek-coder-v2

    领先的开源人工智能代码助手.您可以连接任何模型和任何上下文,以在 IDE 内构建自定义自动完成和聊天体验 推荐以下开源模型: 聊天:llama3.1-8B 推理代码:deepseek-coder-v2 ...

  4. 【转载】 浅谈PyTorch的可重复性问题(如何使实验结果可复现)

    原文地址: https://www.zhangshengrong.com/p/9MNlDK09NJ/ ================================================ ...

  5. 乌克兰学者的学术图谱case2

    ======================================= 0. 学者:Солонін Ю.М. 中文翻译名:索洛宁·尤里·米哈伊洛维奇 英文翻译名:Solonin Yuriy M ...

  6. quartz执行卡死--强制中断线程

    在quartz中经常会碰到由于网络问题或者一些其他不稳定因素导致的线程卡死问题,这往往会导致数据处理的延时.而有时候一时无法定位到卡死的原因,为了降低系统风险,我们就会希望有一个超时机制,当执行超时时 ...

  7. springboot踩坑&问题记录

    常见错误 莫名其妙 classes/:na 前往查看.yml 的配置问题 2.驼峰命名 是因为又用了xml配置,又在yml配置文件中用了mybatis的configuration配置,两个冲突了,不是 ...

  8. Chrome扩展插件的开发--获取网页Cookies

    Chrome扩展插件的开发--获取网页Cookies Chrome浏览器在浏览器类应用软件中一直居于榜首,很多人选择Chrome浏览器不仅仅是因为它的稳定,还有它丰富的可拓展性.那么有没有想自己开发一 ...

  9. 淘宝开放平台接口出租,top平台接口出租,订单R2权限出租,淘宝开放平台R2权限,淘宝开放平台进存销应用出租,淘宝开放平台API出租,TOP平台API出租,淘宝API出租

    淘宝开放平台  open.taobao.com 早在 2016年4月已经关闭erp标签的应用申请了,订单管理标签也关闭了. 这会儿目前肯定是申请不到带有R2权限的订单应用了,要做类似打单软件.订单同步 ...

  10. 人形动画常见IK的处理

    Unity中常见人形动画IK的处理方式 本文将尝试仅使用Untiy内置的Animator来解决常见的几种运动所需的IK.也会给出核心功能的代码实现. 效果一览:b站视频 Unity中人形角色的IK I ...