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. ByteHouse高性能向量检索实践——“以图搜图”

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   随着 LLM 技术的发展,向量检索与向量数据库也受到业界持续关注,它们能够为LLM提供外置记忆单元,通过提供与 ...

  2. 【Vue】接口模块化处理

    在前端Vue项目中,接口会被统一放在一个目录中管理: 一个模块的所有接口放在一个JS文件中: 文件会导入封装好的请求方法,和动态绑定的接口地址 import request from '@/utils ...

  3. 【OracleDB】 10g 安装(Windows)

    Win7系统环境建议右键[管理员身份运行] - 指明选择的安装目录在哪[只更换盘符即可,对官方默认的目录不更改] - 安装类型选择企业版 - 安装Oracle的同时创建数据库服务[数据库] - 口令即 ...

  4. iOS开发基础146-深入解析WKWebView

    WKWebView是苹果在iOS 8中引入的重要组件,它替代了UIWebView,为开发者提供了高性能.高稳定性的网页显示和交互能力.在本文中,我们将深入探讨WKWebView的底层架构.关键特性.使 ...

  5. 多线程之interrupt与优雅停止一个线程

    1.背景 在实际开发中,我们可能会遇到终止某个线程的场景, 比如不断扫描数据库的发货订单时,这时候需停止扫描, 当然我们不能把程序关了,我们只希望停止扫描数据库这一个线程, 那么应该怎么办了? 这就可 ...

  6. mybatis-plus系统化学习之查询专题

    1.背景 查询在实际生产中用得最多,也最灵活. 2.查询案例 表结构: CREATE TABLE `sys_user` ( `id` int(32) NOT NULL AUTO_INCREMENT C ...

  7. 当 Spring 循环依赖碰上 Aysnc,调试过程中出现 BeanCurrentlyInCreationException,有点意思

    开心一刻 前两天有个女生加我,我同意了 第一天,她和我聊文学,聊理想,聊篮球,聊小猫小狗 第二天,她和我说要看我腹肌 吓我一跳,我反手就删除拉黑,我特喵一肚子的肥肉,哪来的腹肌! 循环依赖 关于 Sp ...

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

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

  9. 如何让你的C语言程序打印的log多一点色彩?(超级实用)

    接着上一篇文章<由字节对齐引发的一场"血案" > 在平常的调试中,printf字体格式与颜色都是默认一致的. 如果可以根据log信息的重要程度,配以不同的颜色与格式,可 ...

  10. 【前端js】之小数点保留时的四舍五入问题

    项目遇到金额小数点保留位数,极个别的数会差一分,经调查是因为js的问题. 解决办法: # 方法一:保留两位小数 function keepTwoDecimal(num) { var result = ...