Egg.js配置jwt

一、全局安装jwt

jwt不是egg内置的,所以我们先进行全局安装:

npm install egg-jwt -S

二、全局引入jwt

在config文件夹里面的plugin.js引入:

module.exports = {// 其他引入...jwt: {enable: true,package: "egg-jwt"}
};

三、全局配置jwt

在config文件夹里面的config.default.js里面配置:

module.exports = appInfo => {//其他配置...// 这个是配置跨域的,取消csrfconfig.security = {csrf: {enable: false,}};// 全局配置jwtconfig.jwt = {secret: "123456" //这个是加密秘钥,自行添加};return {...config // es6语法,解构};
};

四、使用jwt

在你需要返回数据的controller或者service里面添加以下代码,在登录的时候返回给客户端:

const { ctx } = this;
const token = await ctx.app.jwt.sign({ openid: resData.openid }, ctx.app.config.jwt.secret, { expiresIn: "24h" });
ctx.status = 200;
ctx.body = {msg: '登录成功',token
}

这里可以看见openid,这部分代码是从小程序的项目里面截取出来的 ,本人现在的状态就是一边开发项目一边用文章的形式记录知识点,希望大家能喜欢。改天再持续讲讲用egg.js实现小程序的登录功能。

五、验证token

在controller里面验证token:

const { ctx } = this;
const token = ctx.request.header.authorization;
//使用插件验证需要加Bearer  自定义中间件验证不需要加
try {
//在操作数据之前先验证tokenctx.app.jwt.verify(token, ctx.app.jwt.secret);const user = await ctx.model.User.findAll()ctx.body = {code:0,data:user}
} catch (error) {//如果没能验证成功ctx.body = "token验证失败"
}

没有带token的结果:

有token的结果:

但是在controller里面需要一个个去验证,不太现实,所以我们通过中间件的方法来验证token,最后把它挂载到路由上。

app文件夹里面新增middleware文件夹,创建jwtVerify.js文件:


在文件内键入以下代码:

'use strict';// 定制白名单
const whiteList = [ '/user/login', '/user/register' ];module.exports = (options) => {return async function(ctx,next){if(!whiteList.some(item=>item==ctx.request.url)){//判断接口路径是否在白名单let token = ctx.request.header.authorization//拿到tokenif(token){//如果token存在let decoded = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret)//解密tokenif(decoded&&decoded.openid){ctx.body={code:0,openid :decoded.openid}}else{ctx.openid=decoded.openid//把openid存在ctx上,方便后续操作。await next()}}else{ctx.body={code:0,msg:'没有token'}}}else{await next()}}
}

然后在路由中使用这个中间件jwtVerify

module.exports = app => {const { router, controller, middleware } = app;router.get('/detail', middleware.jwtVerify(app.config.jwt), controller.home.detail);
};

接着测试一下没有带token的结果:


测试一下有带token的结果:

这里最后给大家留个问题吧,遇见invalid token 的时候,该怎么处理?大家评论区自由发挥~


这里才是正确的结果~

Egg.js使用jwt相关推荐

  1. 入门 | egg.js 入门之egg-jwt

    小小继续学习,这次学习的内容是egg-jwt 相关. 创建egg项目 这里创建一个egg新项目,这里使用的是ts模式. npm init egg --type=ts npm install 安装相关的 ...

  2. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计

    转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...

  3. 一个vue加egg.js的博客

    之前自己的博客是用hexo做的,后面想做一个有后台的博客就打算用vue加node来试试,于是就有了这个博客. 项目地址 W-Blog W-Blog是一个基于vue和node的小小小博客 前端用vue, ...

  4. Serverless 实战 —— Serverless + Egg.js 后台管理系统实战

    Serverless + Egg.js 后台管理系统实战 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个非常优秀的企业级框架,它 ...

  5. uniapp+egg.js+react实现全栈笔记App

    软件介绍 这是一个笔记App,主要使用的技术是uniapp+egg.js+react 软件预览图片: 首页: 编辑页面.png 编辑和登录页面 编辑页面2.png 项目地址: https://gith ...

  6. React+Egg.js实现全栈个人博客

    React+Egg.js实现全栈个人博客 这是一个个人博客软件,前台和后台使用的都是React,后端使用egg.js,地址 前台 文章列表 1.png 文章详情 2.png 后台管理系统 添加文章 3 ...

  7. 【笔记-node】《Egg.js框架入门与实战》、《用 React+React Hook+Egg 造轮子 全栈开发旅游电商应用》

    20210226-20210227:<Egg.js框架入门与实战> 课程地址:https://www.imooc.com/learn/1185 第一章 课程导学 01-01 课程介绍 一. ...

  8. 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计 1

    前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...

  9. Egg.js基础教程

    文章目录 初始化Egg项目 Egg的目录结构 app目录 config目录 路由与控制器 添加一个controller和router 路由获取参数 get请求 post请求 简写形式 插件 nunju ...

  10. egg.js连接mysql数据库遇到的问题

    最近在策划写一个博客采用前后端分离模式,前端使用vue后端使用egg.js,我也是刚开始学习egg.js,所以会将自己踩的坑都记录下来. 首先介绍下后端为什么采用egg.js吧,之前我是学习了koa2 ...

最新文章

  1. 基于WTL自绘 - 表情选择界面
  2. sql中exists,not exists的用法
  3. 设计模式:接口隔离原则
  4. 32接上拉5v_51单片机P0口上拉电阻的选择
  5. matlab填充点面,求大神指点绘制空间内散点图的包络面,,,散点程序如下
  6. 颜宁问4对科研夫妻:男女搭配,如何不累?
  7. 【中生代技术社区内推】
  8. 基于BERT 的中文数据集下的命名实体识别(NER)
  9. G711 G723 G729线路占多少带宽问题
  10. Airtest多点触控测试
  11. cisco(思科)交换机配置篇【二】
  12. 20系列和30系列显卡下的tensorflow-gpu环境配置,避坑指南
  13. GlusterFS概述
  14. web快速入门之基础篇-html:2、基本标签之标题标签、段落标签、换行标签
  15. 信息学奥赛一本通提高组2085:【21NOIP提高组】棋局
  16. 拜托,面试请不要再问我 Spring Cloud Alibaba 底层原理
  17. 【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版
  18. 你好,机器作诗了解一下
  19. 免费SIP软交换云总机IPPBX
  20. 机器学习算法实现解析——word2vec源码解析

热门文章

  1. Apache基金会获得Pineapple基金88.34比特币捐赠
  2. 【优化调度】基于matlab一致性算法求解电力系统分布式经济调度优化问题【含Matlab源码 770期】
  3. 【语音识别】基于matlab带动量项的BP神经网络语音识别【含Matlab源码 430期】
  4. SPSS 相关分析(图文+数据集)【SPSS 023期】
  5. 语音库构建_推动数据采用,以通过语音接口构建更好的产品
  6. roc-auc_AUC-ROC技术的局限性
  7. Numpy中常用函数
  8. java 邮件内嵌图片_(二)JavaMail创建包含内嵌图片的邮件
  9. php完成润年判定程序编写,python闰年判定代码是什么
  10. python数据读写 panda(to_csv和read_csv)【读取dat文件】【写入dat文件】【非csv文件并且有多列数据时】