Egg Jwt 前端登录鉴权实现,token超过时间后登录失效

2023-10-26

框架安装 egg-jwt

 npm i egg-jwt

config配置

pluginjs

jwt : {
    enable: true,
    package: 'egg-jwt',
},

config.default.js

// 配置tokenHandler中间件
config.jwt = {
    secret: 'www.baidu.com',//自定义配置
    sign: { 
      // expiresIn: 60 //测试60s过期
      expiresIn: '1d'   //1天后过期
    }
  }

中间件

middleware 文件夹下新建token_handler.js

'use strict'
module.exports = (options, app) => {
    return async function tokenHandler(ctx, next) {
        let token = ctx.header.authorization; // 获取header里的authorization
        
        if (token) {
            let userinfo = null;
            try {
                token= token.replace('Bearer ', '')
                userinfo = ctx.app.jwt.verify(token, options.secret);
                if (!userinfo) {
                    ctx.body = {
                        data: {
                            message: '登录过期',
                            code: 305,
                            data: null
                        }
                    };
                    return {
                        message: '登录过期',
                        code: 305,
                        data: null
                    }
                }else {
                    await next();
                }
            } catch (error) {
                console.log(error, '222222====2')
                ctx.body = {
                    data: {
                        message: '登录过期',
                        code: 305,
                        data: null
                    }
                };
                return {
                    message: '登录过期',
                    code: 305,
                    data: null
                }
            }
            
        } else {
            ctx.body = { 
                data: {
                    message: '你还未登录,请登录',
                    code: 401, 
                    data: null
                }
            }
            return {
                message: '你还未登录,请登录',
                code: 401, 
                data: null
            }
        }
    }
}

接口路由配置需要jwt的接口

router.js


'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller, middleware } = app;
  const _jwt = middleware.tokenHandler(app.config.jwt); //传入加密字符串
  router.post('/users/findByUsername', _jwt, controller.user.findByUsername)
};

前端React项目接口拦截

instance.interceptors.response.use(
  (res) => {
    NProgress.done();
    
    if(res.data?.data?.code == 200) {
      return Promise.resolve(res.data);
    }else if(res.data?.data?.code == 305){
      setTimeout(()=>{
        localStorage.removeItem("token");
        store.dispatch(loginOutAction());
        window.location.reload()
      }, 2000)
      return Promise.reject({
        code: res.data.data.code,
        message: "登录已失效,即将跳转到登录页面!"
      });
    }else {
      return Promise.reject({
        code: res.data.data.code,
        message: res.data.data.message
      });
    }
    
  },
  (err) => {
    NProgress.done();
    return Promise.reject({
        code: err.response.status,
        message: err.response.data.error,
    });
    
    
  }
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Egg Jwt 前端登录鉴权实现,token超过时间后登录失效 的相关文章

  • fitBounds() 显示整个地球(如果地图先隐藏然后显示)

    I have a bunch or markers and I want to show only the area containing them I found a long list of similar questions see
  • 如何在MVC中将整套模型附加到formdata并获取它

    如何通过formdata传递一整套模型对象并将其转换为控制器中的模型类型 以下是我尝试过的 JavaScript 部分 model EventFromDate fromDate EventToDate toDate ImageUrl img
  • 如何将javascript变量放入php echo [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想将 JavaScript 变量添
  • iframe 不读取 Chrome 中的 cookie

    Chrome 不允许子 iframe 读取自己的 cookie 我有一个带有子 iframe 的父网页 家长在https first site com 孩子在 父级内部 cookie set with 小路 安全 真实 仅http 假 域名
  • Soundcloud自定义播放器动态添加和播放歌曲

    我在用soundcloud自定义播放器 https github com soundcloud soundcloud custom player创建一个可以播放所有歌曲的播放器 我的网站 当我只放置任何曲目或帖子的静态网址时 这效果非常好
  • 是否可以实现异步跨域文件上传?

    有可能的 参见下文 首先我用这张图来解释一下异步文件上传可以实现 对不起 我已经关闭了我的一个域 该图像现在消失了 不过 这确实是一个很好的图像 这是在我发现 Stack Overflow 可以通过 Imgur 上传图像之前 正如您所看到的
  • 如何使事件 DOM 侦听器适应 Google Maps JavaScript API v3.35

    我曾经使用以下代码来捕获用户的 Enter 键事件 如果用户没有选择其中任何一个 即没有标记为 pac 的 pac item 则自动从自动完成结果 pac items 中选择第一个结果 项目选择 var input document get
  • 使用 Geoserver 中的 Javascript 动态设置 WMS 图层样式

    我的 Web 应用程序通过 Geoserver 2 6 0 从 Postgis 向 OpenLayers 地图提供 WMS 图层 工作正常且符合预期 用户可以通过 WMS 图层的属性 通过 HTML 中的下拉框 过滤 WMS 图层的某些元素
  • 使用 html2canvas 将 highcharts 图表渲染为 pdf 在 IE 和 Firefox 上不起作用

    我们使用 html2canvas js 和 html2canvas svg js 版本 0 5 0 beta1 以及 highcharts js 将圆环图下载为 pdf 这在 Chrome 中按预期工作 但在 IE 和 Firefox 中不
  • 使用 ChartJS v2.0 自定义图例

    我正在尝试在 ChartJS v2 0 中创建自定义图例模板 在 ChartJS v1 中 我只是向新的 Chart 构造函数添加了一个属性 例如 legendTemplate ul li span style background col
  • 循环遍历字符串中的 html 标签并将内部文本添加到数组中

    我有一些 HTML 内容保存为字符串 我想循环遍历该字符串中的每个标题标签并获取其内部文本 let str h1 topic 1 h1 p desc of topic 1 p h1 topic 2 h1 p desc of topic 2
  • D3js 多折线图 mouseOver

    我正在努力适应this http bl ocks org mbostock 3902569D3js 折线图示例 将鼠标悬停在我的多线图表上的使用情况 看起来d3 mouse this 0 on the mousemove函数生成以下错误 无
  • 装饰器功能不起作用(意外标记)

    刚刚尝试在 React 中使用装饰器 import React from react import Fade from Transitions Fade import withVisible from withVisible withVis
  • 在 WordPress 页面上嵌入 swf

    我正在尝试将 swf 嵌入到 WordPress 页面中 这听起来很简单 但它不起作用 我不明白为什么 我已将所有相关文件上传到服务器上 并且我相当确定所有文件路径都是正确的 包含 fla 和 swf 文件的文件夹还包含一个 index h
  • 在 JavaScript onClick 事件处理程序中转义双引号

    下面的简单代码块可以在静态 HTML 页面中提供 但会导致 JavaScript 错误 您应该如何转义中嵌入的双引号onClick处理程序 即 xyz 请注意 HTML 是通过从数据库中提取数据动态生成的 其中的数据是其他可能带有单引号或双
  • 我们可以使用 axios 的 onDownloadProgress 来加载 API 吗?

    我需要使用 axios 创建一个用于在 React 项目中加载 API 的进度条 我为此发现了 onDownloadProgress 函数 但我不知道我们是否可以使用它来获取诸如加载百分比之类的信息 或者它是否仅用于文件下载 所以我不确定我
  • jQuery Deferred - 向 Deferred 合约添加回调

    我正在尝试在现有 Deferred 的状态设置为成功之前向其合约添加另一个异步调用 不要尝试用英语解释这一点 请参阅以下伪代码 when ajax url someUrl data data async true success funct
  • 如何在 PHP、HTML 表单和 Javascript 之间传递布尔值

    我有一个 PHP 程序 它使用 HTML 表单并使用 JavaScript 进行验证 HTML 表单中有一个隐藏字段 其中包含一个布尔值 该值由 PHP 设置 由 JavaScript 在提交时进行验证 然后传递到另一个 PHP 页面 当我
  • 同步 jQuery 动画

    我正在尝试同时获得淡入 不透明度切换 和边框淡入 使用jquery 动画颜色 http www bitstorm org jquery color animation 同时开火 但我遇到了一些麻烦 有人可以帮忙查看以下代码吗 fn exte
  • 如何找到我的 typescript/react 模块的声明?

    我对前端技术非常 非常 陌生 特别是 React 和 TypeScript 当尝试做一件简单的事情 即使用反应组件时 我的问题出现了https github com ckeditor ckeditor5 https github com c

随机推荐

  • 剑网三服务器缺少必要启动文件,win7系统玩剑网三游戏经常掉线的解决方法

    很多小伙伴都遇到过win7系统玩剑网三游戏经常掉线的困惑吧 一些朋友看过网上零散的win7系统玩剑网三游戏经常掉线的处理方法 并没有完完全全明白win7系统玩剑网三游戏经常掉线是如何解决的 今天小编准备了简单的解决办法 只需要按照1 掉线基
  • 循环神经网络RNN以及几种经典模型

    RNN简介 现实世界中 很多元素都是相互连接的 比如室外的温度是随着气候的变化而周期性的变化的 我们的语言也需要通过上下文的关系来确认所表达的含义 但是机器要做到这一步就相当得难了 因此 就有了现在的循环神经网络 他的本质是 拥有记忆的能力
  • el-menu-item内容过多,不能滚动

    问题描述 这里放了六张图片 只能看到最下面的部分 上面的部分被挤出了屏幕外面 这里的弹出框是element ui组件自动生成的 即这个div 我此时有关这部分的代码如下 解决思路 一开始是想抓住这个生成的div 修改这个div的样式试图让它
  • python 2.x安装

    1 查看当前python版本 python version 2 安装最新2 x版本 brew install python 2 安装完成后 注意一下提示 pip and setuptools have been installed To u
  • 阻碍区块链应用落地的五大难题和解决方案

    2018年初区块链掀起了一阵新热潮 多家互联网公司纷纷宣布推出区块链项目 新兴的区块链项目方和媒体百家争鸣 一时之间区块链行业风光无限 区块链概念的火爆 使得越来越多的人开始学习它 理解它 甚至 拥抱 它 只是沉浸在 狂欢 里的众人怎么也没
  • show,attend and tell(image caption论文复现总结)

    论文中的核心思想 GitHub上的Image Caption项目https github com sgrvinod a PyTorch Tutorial to Image Captioning 研究的问题 Image Caption 为图片
  • _I,_O,_IO,条件编译#ifndf _HEAD_H中的下划线_是什么,有什么用

    1 其实质是一个宏名 由此我们可以防止发生重复定义或声明 2 编程风格 使标识符含义更清晰易懂 假设你的头文件名为head h 根据习惯 我们声明一个宏HEAD H 对应这个头文件 在头文件中开始的地方和结尾的地方加上 对HEAD H的声明
  • CentOS8更换阿里云yum源

    以下是使用阿里云的CentOS 8镜像源配置文件作为示例 备份原有的yum源文件 以便需要时恢复 sudo mv etc yum repos d CentOS tmp 下载并安装阿里云的CentOS 8源配置文件 sudo curl o e
  • AJAX JSON的数据传输

    文章目录 AJAX的JSON引入 javascriptJSON对象创建和访问 javascript怎么创建JSON对象 javascript访问JSON javascript字符串转换成JSON对象 对案例进行改造 使用json传输 将ja
  • spring boot 使用审计

    创建User类 测试类只有一个name属性 Entity Table name UcenterUser Data public class User extends BaseEntity private String name 抽取一个基类
  • ArrayList特点分析及源码阅读

    1 特点 ArrayList是个动态数组 实现List接口 主要用来存储数据 如果存储基本类型的数据 如int long boolean short byte 那只存储它们对应的包装类 增删慢 每次删除元素 都需要更改数组长度 拷贝以及移动
  • warning: retrying (retry(total=4, connect=none, read=none, redirect=none, st

    今天在利用pip安装时遇到了一些问题 首先在使用pip语句时 提示pip不是内部命令行 但是其实已经安装了pip 原因 由于python3 x之后pip都是命名为pip3 解决 将安装语句的pip 改为pip3 问题2 使用pip安装安装包
  • 一文看懂软件测试方法和规范

    软件测试方法是指测试软件的方法 随着软件测试技术的不断发展 测试方法也越来越多样化 针对性更强 选择合适的软件测试方法可以让我们事半功倍 本文主要介绍的是软件测试方法和规范 跟随小编一起来了解一下具体的测试流程及规范吧 软件测试基本流程图
  • jmeter吞吐量_性能测试jmeter详解

    曾光红 文 目前最新版本发展到5 0版本 需要Java7以上版本环境 下载解压目录后 进入apache jmeter 5 0bin 双击ApacheJMeter jar文件启动JMemter 1 创建测试任务 添加线程组 右击测试计划 在快
  • Android应用程序创建桌面快捷方式

    pre class java 测试环境为Adnroid 2 1以上 第一步 AndroidManifest xml 权限配置 添加快捷方式权限 pre
  • 关于query.filter()的一些常用的方法

    equals query filter User name ed not equals query filter User name ed like query filter User name like ed in query filte
  • RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you

    Pytorch报错 RuntimeError Cannot re initialize CUDA in forked subprocess To use CUDA with multiprocessing you must use the
  • Mybatis提高查询效率的方式

    一 缓存机制 1 一级缓存 当mysql连续执行两次select from table where id 1 第一次会执行sql语句查询数据库 然后保存到sqlsession缓存 第二次查询会先从缓存里查找 有的话直接返回不会执行sql 但
  • 关于在RK3288上安装Opencv的方法

    Opencv是一个开源的计算机视觉库 可以给开发人员提供更便捷的方式设计复杂的视觉应用 Opencv主要是用c和c 编写 可以运行在Windows Linux Mac等上 这几天尝试着在RK3288上安装Opencv 被虐了好多遍 幸好没有
  • Egg Jwt 前端登录鉴权实现,token超过时间后登录失效

    框架安装 egg jwt npm i egg jwt config配置 pluginjs jwt enable true package egg jwt config default js 配置tokenHandler中间件 config