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. 【Windows】固定Win系统的IP地址

    是我迟钝了,突然想到这个事情就记一下 先开终端查看IP信息 : IPCONFIG 找到当前连接: IPv4协议设置: 家庭网络设置就这样,公司内网有自己的一个DNS服务地址,这个网管知道 在Win11 ...

  2. 【Java】图片上传逻辑

    后台逻辑: 后台服务,用Dubbo框架作为一个文件微服务 package cn.ymcd.aisw.service; import cn.ymcd.aisw.dto.RpcResult; /** * ...

  3. 【Java】File 文件类

    File 文件类 File类的一个对象,代表了一个文件和一个文件目录/文件夹 File类所属在java.io 的包下 构造器部分 - 以parent为父文件,child为子路径创建File对象,可以理 ...

  4. 【Java】找不到此类异常

    Java.lang.classNotFoundException 找不到此类异常: java.lang.ClassNotFoundException: org.springframework.web. ...

  5. NVIDIA机器人仿真项目 —— Isaac Gym - Preview Release

    地址: https://developer.nvidia.com/isaac-gym 过期代码库地址:(已不再维护的代码库,现已由isaac gym项目合并到isaac sim项目)(2022年开始停 ...

  6. 使用MPI时执行代码时运行命令中参见的几种参数设置

    我们写完mpi代码以后需要通过执行命令运行写好的代码,此时在运行命令中加入设置参数可以更好的控制程序的运行,这里就介绍一下自己常用的几种参数设置. 相关资料,参看前文: https://www.cnb ...

  7. JVM指令大全之不太全系列

    一.未归类系列A 此系列暂未归类. 指令码    助记符                            说明0x00         nop                           ...

  8. 16-canvas绘制圆弧

    1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...

  9. SMU Summer 2023 Contest Round 3

    SMU Summer 2023 Contest Round 3 A. Curriculum Vitae 题意就是要求\(1\)后面不能有\(0\)的情况下的子序列最长长度, 也就是求一个最长不下降子序 ...

  10. canvas实现手动绘制矩形

    开场白 虽然在实际的开发中我们很少去绘制流程图 就算需要,我们也会通过第3方插件去实现 下面我们来简单实现流程图中很小的一部分 手动绘制矩形 绘制一个矩形的思路 我们这里绘制矩形 会使用到canvas ...