egg jwt token生成以及验证拦截

2023-10-30

1,安装egg-jwt

npm install egg-jwt --save


2,配置

config\plugin.js

 jwt: { //jwt插件启用
    enable: true,
    package: 'egg-jwt',
  },

config\config.default.js

 config.jwt = { //jwt加盐以及设置过期时间
    secret: 'jwt',
    expiresIn:'1h'
  };

3.生成token

app\controller\api\home.js

const token = ctx.app.jwt.sign({
      name:result.dataValues.name,uid:result.dataValues.id,status:result.dataValues.status //储存参数
    }, this.app.config.jwt.secret, {
      expiresIn:this.app.config.jwt.expiresIn, //过期时间
    });

4.验证token

app\middleware\jwtValidate.js

'use strict';
module.exports = (options, app) => {
    return async function (ctx, next) {
        //拿到不需要验证的token的路由
        const routerAuth = [ //白名单
            "api",
            "home"
        ];
        //获取当前路由
        const url = ctx.url;

        var strs = new Array(); //定义一数组
        strs = url.split("/"); //字符分割
        //判断当前路由是否需要验证token
        const flag = routerAuth.includes(strs[2]?strs[2]:strs[1])    //根据模块来判定白名单
        // const flag = routerAuth.includes(url)    //根据模块来判定白名单
        if (flag) {
            await next();
        } else {
            //获取token,如果没有传入token,则为空
            // console.log(ctx.headers, "获取请求头")
            var token = ctx.headers.token ? ctx.headers.token : '';
             // var token = ctx.headers.authorization ? ctx.headers.authorization : '';  //请求头字段为 authorization时使用
            // token = token.substring(7) //把Bearer 截取掉,解析的时候不需要加上Bearer 
            console.log(token, "获取thonk")
            // 解析token
            try {
                console.log(token, app.config.jwt.secret)
                const decode = await app.jwt.verify(token, app.config.jwt.secret);
                // console.log(decode, "解析token")
                ctx.user = {
                    uid: decode.uid,
                    name: decode.name,
                    status: decode.status,
                };

                if (decode.status != 1) {
                    ctx.body = {
                        code: 401,
                        message: '该用户已被停用',
                        data: null
                    }
                } else {

                    await next();
                }

            } catch (err) {
                app.logger.debug(err); //打印错误日志
                ctx.body = {
                    code: 401,
                    message: 'token失效或解析错误',
                    data: null
                }
            }

        }

    }
}

白名单我用的是类名通配,如果要细化到url 去掉分割就好

5.启用中间件

config\config.default.js

  config.middleware = ["jwtValidate"];

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

egg jwt token生成以及验证拦截 的相关文章

  • 0x800a1391 - JavaScript 运行时错误:“阶段”未定义

    我正在尝试做这个教程 http www sitepoint com creating a simple windows 8 game with javascript game basics createjsaseljs http www s
  • 等待动态加载脚本

    在我的页面正文中 我需要插入以下代码作为 AJAX 调用的结果 p Loading jQuery p p Using jQuery p 我不能使用 load 由于文档已经加载 因此该事件不会触发 这安全吗 如果没有 我如何确保在执行自定义生
  • 授权标头格式错误;区域“us-east-1”是错误的;期待“eu-central-1”

    使用 Node JS 和以下配置文件 accessKeyId XXX secretAccessKey XXXX 区域 eu central 1 签名版本 v4 我仍然收到此错误消息 就好像 aws sdk 尝试访问 us east 1 Re
  • AngularJS Youtube 播放器嵌入非常大的播放列表

    我目前正在构建一个 AngularJS 应用程序 我知道它有点过时 但我对它很有信心 我的应用程序需要嵌入一个 YouTube 播放器 其中包含一个非常大的播放列表 大约 1500 个项目 但我无法对其进行编码 以便它实际上可以嵌入超过 2
  • 将压缩的json数据存储在本地存储中

    我想将 JSON 数据存储在本地存储中 有时存储的数据可能超过 5MB 每个域的浏览器允许的最大阈值 无论如何 我可以压缩或压缩数据并将其存储在本地存储中吗 如果对大数据进行每个 JS 函数的压缩和解压 会增加多少延迟 我正在使用这个 js
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • Javascript 清理:插入可能的 XSS html 字符串的最安全方法

    目前我正在将此方法与 jQuery 解决方案结合使用 以清除字符串中可能的 XSS 攻击 sanitize function str return htmlentities str ENT QUOTES return div div tex
  • 适用于 HTML5 混合应用程序的 CORS

    我读过很多关于 CORS 的文章 以及允许 Access Control Allow Origin 如何成为 Web 服务器的安全漏洞 但没有一篇文章解释了如何允许 HTML5 混合应用程序访问某些不允许使用通配符 的域上托管的 Web 服
  • 为什么 "asdf".replace(/.*/g, "x") == "xx" ?

    我偶然发现了一个令人惊讶的 对我来说 事实 console log asdf replace g x Why two替代品 似乎任何没有换行符的非空字符串都会产生此模式的两个替换 使用替换函数 我可以看到第一个替换是整个字符串 第二个替换是
  • 如何从代码隐藏文件中的asp.net用户控件注册(调用)jQuery函数?

    如何从代码隐藏文件中的asp net用户控件注册 调用 jQuery函数 您可以使用ClientScriptManager RegisterStartupScript http msdn microsoft com en us librar
  • 带有子节点的拖放区域

    我有一个带有多个子节点的拖放区域 主要元素有dropenter and dropleave事件 但是 如果您将文件拖动到主元素内部和子节点上方 则dropleave被触发 如何处理 以便dropleave仅当拖动的元素和鼠标位于主元素之外时
  • IE7 问题 - 当禁用文件下载自动提示时无法下载流式文件

    我的应用程序是基于 J2EE JSP Servlet 的 当我尝试从 JSP 打开新窗口 弹出窗口 并调用 Servlet 操作 例如 Streamer do 以在该弹出窗口内传输 PDF 文件时 我遇到了问题 问题 当 IE 7 gt 工
  • Chrome 上的 contenteditable 中未显示编辑光标

    当您打开此页面时 请参阅现场演示 http jsfiddle net gs3p1a6r 3 show 与 Chrome span span CSS myspan border 0 outline 0 JS myspan focus the
  • 如何检查我的 create-nuxt-app 版本并升级?

    背景 以前 运行yarn create nuxt app myApp 会安装Nuxt v2 4 0 但今天我注意到您降级到Nuxt v2 0 0 我没有改变开发环境 所以我无法理解这种行为 当我发现这个问题时 我做了一些搜索并在其他地方抱怨
  • 如何在不刷新页面的情况下更新页面 html 和 url

    我想知道是否有人可以指出我学习如何在不刷新页面的情况下更新页面 html 和 url 的方向 是否有任何现有的 javascript 库可以处理这个问题 或者有一本涵盖此类事情的好书 这是使用该效果的示例网站 http onedesignc
  • 打字稿不适用于 tsconfig.json

    在项目中使用 tsconfig 运行 tsc watch 时 出现以下错误 它需要 Node js 中的 React 和 Redux 类型 error TS2688 Cannot find type definition file for
  • 查看元素的所有 dom 事件

    我有一个 jQuery UI 日期选择器 当您单击日期时 它会清除我的 URL 哈希值 并且不会更改文本框中的日期 我假设某个地方还有其他一些 JavaScript 实用程序 它也正在调用某种委托事件 抛出错误并终止 jquery 处理程序
  • 如何在jsp页面中包含javascript

    我是 J2EE 和 Web 开发的新手 这是我的问题 我想在网页中包含 angular js 这是有效的版本 但我也想要一些本地的 javascript 文件 并且希望我想在本地目录中导入 angularjs
  • 在 Javascript 中动态创建 []array

    也许这将是一个真正愚蠢的问题 但我是 JavaScript 新手 并且坚持动态创建数组 如下格式 items Date 2012 01 21T23 45 10 280Z Value 7 Date 2012 01 26T23 45 10 28
  • Microsoft SQL 数据库的 WebSocket 侦听器

    我目前正在开发一个项目 该项目必须使用 WebSockets 作为将数据传输到客户端的方式 基础设施看起来像这样 客户端 gt Web 服务器 gt Microsoft SQL 数据库 我想最理想的情况应该是这样的 客户端打开一个到服务器的

随机推荐

  • Ubuntu上搭建RK3588开发环境

    目标 Ubuntu上搭建RK3588开发环境 并成功运行 测试其芯片性能 可参考连接 https wiki t firefly com zh CN Core 3588J started html x 16号之前完成打包Ubuntu系统 差一
  • String[] 插入元素数据

    String pIdStr request getParameter ids String projectIdList pIdStr split List
  • Mybatis报错mapkey is required解决方案

    Mybatis报错mapkey is required解决方案 问题背景 解决方案 总结 Lyric 几天都没有喝水也能活 问题背景 因为使用了mybatisX插件 导致检查报错mapkey is required 解决方案 1 关闭myb
  • vue中下载文件使用file-saver,文件错误excel无法打开

    最近使用到了file saver下载文件 通过axios调接口拿文件数据 再通过file saver下载文件 但就在我成功下载文件并打开时 提示这个信息 主要的原因就是没有设置响应的文件流类型为 blob 加上后就可以打开了
  • FreeRTOS config开始的宏

    FreeRTOSConfig h系统配置文件中可以自定义 FreeRTOS h中定义默认值 configAPPLICATION ALLOCATED HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的 将宏configAPPLIC
  • 基于flask做的用户注册界面一(无后台接收,无数据库)

    1 init py文件界面 再此声明 完全是个人问题 一般 init py不能这样用 init py文件 from flask import Flask app Flask name debug True import apps view
  • springboot(2.1.1.RELEASE)启用jdk动态代理(默认启用cglib)的方法

    大前提 该类必须实现了某个接口 其他类使用注解引用该类时 必须基于其实现的接口类型注入 否则注入不成功 方式1 启动类上注解如下设置 SpringBootApplication exclude AopAutoConfiguration cl
  • 两幅有偏差的影像同坐标的地物不一定一样

    第一幅图上 如果经纬度100 100上是只狗 那么另外一个图上同经纬度不一定有狗了 是有偏差的
  • centos 6.5 安装JDK 7

    安装说明 系统环境 centos 6 3 安装方式 rpm安装 软件 jdk 7 linux x64 rpm 检验系统原版本 root admin java version 进一步查看JDK信息 root admin rpm qa grep
  • java中字节流的分类都有哪些_Java------字节流和字符流(I)

    字节流 读写字节文件 通常使用字节流 如 二进制文件 jpg mp3 avi exe com dll windows平台的执行文件 exe com dll 字符流 读写字符文件 通常使用字符流 如 txt java css doc html
  • MAE入局多模态分析,CMU联合微软发布仅需文本监督的视觉语言新模型VLC

    原文链接 https www techbeat net article info id 3677 作者 seven 论文链接 https arxiv org abs 2205 09256 代码链接 https github com guil
  • 使用vite快速安装项目(SyntaxError:Unexpected reserved word?)

    前提环境 需要安装nodejs和npm 并且nodejs版本必须在16以上 安装vite 打开命令窗口 执行命令 npm install vite g 1 2 如果执行该命令报错 SyntaxError Unexpected reserve
  • gjb1188a

    unsigned short VerifyWord1188A unsigned short data 32 unsigned long len unsigned char i 0 unsigned short verifyWord 0 fo
  • numpy的相关使用方法

    20210211 引言 之前的时候 一些关于numpy的内容都记录在另一篇文章中 pandas及numpy 常用操作 里面大部分都是pandas的操作 但是最近使用numpy比较多了之后 也积累了一些内容 所以这里专门记录一下 内容列表 拼
  • 计算机二级题目之数组学习

    1 下列给定程序中 函数fun的功能是 用冒泡法对6个字符串按由小到大的顺序进行排序 请改正程序中的错误 使它能得出正确的结果 include
  • (16)pandas多层级索引的访问

    import numpy as np import pandas as pd from pandas import Series DataFrame 内容 Series数组 DataFrame数组 构建一个多层级索引 构造一个多维索引 in
  • C++异常处理

    一 异常处理定义 异常是程序在执行期间产生的问题 任何事物 任何情况都可以当做异常 错误算是异常的一种 C 异常是指在程序运行时发生的特殊情况 比如尝试除以零的操作 异常处理机制 暂时性不做处理 抛出异常 留给使用者去处理 异常提供了一种转
  • react调用model层的接口(dispatch)在组件中获取接口返回状态

    我们调用model层的接口 然后在组件中获取接口返回的数据 逻辑通常是 在model层写好了逻辑 去获取或者计算接口返回数据 然后组件再引入这个model层中的数据 在组件中dispatch这个接口就行 但是我现在在组件中调用这个接口后 我
  • python import模块方法

    python包含子目录中的模块方法比较简单 关键是能够在sys path里面找到通向模块文件的路径 下面将具体介绍几种常用情况 1 主程序与模块程序在同一目录下 如下面程序结构 src mod1 py test1 py 若在程序test1
  • egg jwt token生成以及验证拦截

    1 安装egg jwt npm install egg jwt save 2 配置 config plugin js jwt jwt插件启用 enable true package egg jwt config config default