eggjs中使用jwt

2023-11-07

开发接口时需要生成token 和校验token,egg-jwt就是一个很不错的插件,下边就教大家如何使用,废话不多说,先看效果
在这里插入图片描述
在这里插入图片描述

开始教程

安装包

yarn add egg-jwt

全局引入jwt

config/plugin.js

module.exports = {
	jwt: {
    enable: true,
    package: "egg-jwt"
  }
};

全局配置jwt

config.default.js

module.exports = appInfo => {
  //...

  // 全局配置jwt
  config.jwt = {
    secret: "12345678" // 加密秘钥
  };

};

简单使用jwt

在这里插入图片描述

controller/login.js

实验生成token,登录后将token返回给前端
'use strict';
const Controller = require('egg').Controller;
class LoginController extends Controller {
  async index() {
    const { ctx } = this;
    let params = ctx.request.body;
    const token = await ctx.app.jwt.sign(params, ctx.app.config.jwt.secret, { expiresIn: "24h" });
    console.log('token-create: ', token);
    ctx.body = {
      code: 0,
      token
    }
  }
}

module.exports = LoginController;

验证token

controller/login.js
使用jwt.verify() 来检测token的正确性;

'use strict';
const Controller = require('egg').Controller;

class LoginController extends Controller {
  // 验证token
  async testToken() {
    const { ctx } = this;
    const token = ctx.request.header.token;
    console.log('token==2: ', token);
    try {
      ctx.app.jwt.verify(token, ctx.app.jwt.secret);
      ctx.body = 'token正常'
    } catch (err) {
      ctx.body = 'token有问题'
    }
  }

}

module.exports = LoginController;

进阶-中间件处理token的校验

在每个controller中验证太麻烦,可以用中间件统一验证,并挂载到路由上
app/middleware/jwtVerify.js

'use strict';
// 定制白名单
const whiteList = ['/login', '/login/register'];

module.exports = () => {
  return async function (ctx, next) {
    if (!whiteList.some(item => item == ctx.request.url)) {//判断接口路径是否在白名单
      let token = ctx.request.header.token//拿到token
      // console.log('jwtm---token----: ', token);
      if (token) {//如果token存在
        try{
          let decoded = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret)//解密token
          // decoded= {name, password, iat, exp} // jwt.sign时的数据,和iat,exp
          await next()
        }catch(err){
          ctx.body = {
            code: 1,
            msg: 'token不对'
          }
        }
      } else {
        ctx.body = {
          code: 1,
          msg: '没有token'
        }
      }
    } else {
      await next()
    }
  }
}

配置路由

router.js

'use strict';
module.exports = app => {
  const { router, controller, middleware } = app;
  router.post('/login', controller.login.index);
  router.post('/login/test-token', middleware.jwtVerify(), controller.login.testToken);
};

至此,jwt生成token,和验证token处理完毕。
如果帮到了正在研究的你,请打赏一元表示鼓励哈,要么点个关注和赞也行哈。
在这里插入图片描述
在这里插入图片描述

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

eggjs中使用jwt 的相关文章

随机推荐

  • mapGetters 辅助函数

    1 mapGetters 辅助函数 mapGetters 辅助函数 mapGetters 辅助函数仅仅将store 中的 getter 映射到局部计算属性 1 import mapGetters from vuex 2 export def
  • 列出一个文件夹下的所有文件名(全路径)

    需求 列出一个文件夹下的所有文件的全路径文件名 如果文件是文件夹 那么再次遍历这个文件夹的的所有文件名 直到遍历的文件不是文件夹为止 这时输出文件的全路径名 分析 可以用函数实现 1 函数参数1个 就是要遍历的文件夹的名字 2 遍历该文件夹
  • java垃圾回收机制详解

    文章目录 一 垃圾回收机制是什么 二 机制运行原理 三 机制运行步骤 一 垃圾回收机制是什么 Java的垃圾回收 Garbage Collection GC 机制是Java内存管理的核心部分 它可以自动回收不再被程序使用的内存空间 防止内存
  • Makefile 中:= ?= += =的区别

    在Makefile中我们经常看到 这几个赋值运算符 那么他们有什么区别呢 我们来做个简单的实验 新建一个Makefile 内容为 ifdef DEFINE VRE VRE Hello World else endif ifeq OPT de
  • 今天Chat GPT又胡说八道,看我如何纠正的

    今天想把python pydantic 转成markdown mermaid 就去问Chat GPT Chat GPT给出了如下答案 然后 我就打入命令安装 结果这个包根本就不存在 既然找不到 pydantic 转 mermaid 的工具
  • Docker 安装hadoop

    一 实验环境 实验设备 硬件 单核CPU 内存1G 软件 Ubuntu 16 04操作系统 Docker Hadoop 二 实验原理及内容 1 在Ubuntu系统中安装Docker Apt install docker 复制代码 Apt g
  • Kendo UI开发教程(9): Kendo UI Validator 概述

    Kendo UI Validator 支持了客户端校验的便捷方法 它基于HTML 5 的表单校验功能 支持很多内置的校验规则 同时也提供了自定义规则的便捷方法 完整的Kendo UI 的Validator可以参见API 文档 HTML 5
  • SQL优化

    1 应尽量避免在 where 子句中使用 或 lt gt 操作符 否则将引擎放弃使用索引而进行全表扫描 2 对查询进行优化 应尽量避免全表扫描 首先应考虑在 where 及 order by 涉及的列上建立索引 3 应尽量避免在 where
  • Java 集合 (Set, TreeSet, HashSet)

    目录 1 Set 2 TreeSet 2 1 自然排序 2 2 比较器排序 2 3 两种比较方式小结 3 HashSet 3 1 哈希值 3 2 底层原理 4 小结 1 Set Set 集合特点 可以去除重复 存取顺序不一致 没有带索引的方
  • 手机快充协议

    高通 QC2 0 QC3 0 QC3 5 QC4 0 QC5 0 FCP SCP AFC SFCP MTKPE1 1 PE2 0 PE3 0 TYPEC PD2 0 PD3 0 3 1 VOOC 支持 PD3 0 PD2 0 支持 QC3
  • UML用例图的作用、功能模块图作用与数据库设计三者关系

    这周周一 我们导师要求小组成员开会 我们分别汇报自己的工作 在会中 谈到了用例图 于是我们开始对大家熟悉的用例图进行探讨 经过探讨与自己的思考 我认为应该从以下几个问题来弄清楚用例图的作用 1 用例图由谁来做 为谁做 做完了有什么用途 用例
  • Java8 stream 根据对象字段去重

    public class Java8StreamTest public static class Book private String id private String name public Book String id String
  • attention注意力机制学习

    参考资料 目前主流的attention方法都有哪些 JayLou娄杰的回答 知乎 目前主流的attention方法都有哪些 张戎的回答 知乎 Attention机制解读 高峰OUC的文章 知乎 Transformer详解 一 Attenti
  • linux:filezilla连接ubuntu失败,提示 状态:尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。

    问题 如上 解决办法 发现ping的通 说明是别的问题 可能是端口号不对 sftp与ftp是否没有区别 超级向向阳的回答 知乎 ftp和sftp有什么区别 ftp和sftp哪个速度快 贝锐花生壳官网 ps 如果是连接超时 注意是否开启了防火
  • 记一次sqlmap的--os-shell的实战

    一 站点内容获取 描述 一个后台管理界面 通常我们会尝试使用弱口令爆破 sql注入 万能密码等 在这个站点我们尝试了弱口令爆破没有成功 但尝试sql注入成功了 并且发现了一系列的struts2框架漏洞 并成功接管了站点的数据库等等 二 站点
  • 2023华为OD机试真题【统一限载最小值】【2023.Q1】

    题目描述 火车站附近的货物中转站负责将到站货物运往仓库 小明在中转站负责调度2K辆中转车 K 辆干货中转车 K 辆湿货中转车 货物由不同供货商从各地发来 各地的货物是依次进站 然后小明按照卸货顺序依次装货到中转车上 一个供货商的货只能装到一
  • 如何在 Linux 中将文件编码转换为 UTF-8

    转自 https linux cn article 7959 1 html 在这篇教程中 我们将解释字符编码的含义 然后给出一些使用命令行工具将使用某种字符编码的文件转化为另一种编码的例子 最后 我们将一起看一看如何在 Linux 下将使用
  • Supermap聚合服务

    大家好 下面呢 我们来学习supermapserver的聚合服务 我们主要学习三个方面的内容 首先呢 我们来了解一下什么是聚合服务 它的一个含义那么其次呢 我们来了解一下聚合服务的原理啊 最后呢 我们来学习一下 如何去创建 聚合服务创建聚合
  • 使用Mathjax网页插入公式

    本文关于 想在网页里面插入公式 找到了 Mathjax 这里说怎么设置 具体来说是怎么在博客园设置 以及一点点如何使用 设置方法 需要开通js的权限 进入 设置 在页脚Html代码输入
  • eggjs中使用jwt

    开发接口时需要生成token 和校验token egg jwt就是一个很不错的插件 下边就教大家如何使用 废话不多说 先看效果 开始教程 安装包 yarn add egg jwt 全局引入jwt config plugin js modul