Egg.js使用jwt
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相关推荐
- 入门 | egg.js 入门之egg-jwt
小小继续学习,这次学习的内容是egg-jwt 相关. 创建egg项目 这里创建一个egg新项目,这里使用的是ts模式. npm init egg --type=ts npm install 安装相关的 ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...
- 一个vue加egg.js的博客
之前自己的博客是用hexo做的,后面想做一个有后台的博客就打算用vue加node来试试,于是就有了这个博客. 项目地址 W-Blog W-Blog是一个基于vue和node的小小小博客 前端用vue, ...
- Serverless 实战 —— Serverless + Egg.js 后台管理系统实战
Serverless + Egg.js 后台管理系统实战 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个非常优秀的企业级框架,它 ...
- uniapp+egg.js+react实现全栈笔记App
软件介绍 这是一个笔记App,主要使用的技术是uniapp+egg.js+react 软件预览图片: 首页: 编辑页面.png 编辑和登录页面 编辑页面2.png 项目地址: https://gith ...
- React+Egg.js实现全栈个人博客
React+Egg.js实现全栈个人博客 这是一个个人博客软件,前台和后台使用的都是React,后端使用egg.js,地址 前台 文章列表 1.png 文章详情 2.png 后台管理系统 添加文章 3 ...
- 【笔记-node】《Egg.js框架入门与实战》、《用 React+React Hook+Egg 造轮子 全栈开发旅游电商应用》
20210226-20210227:<Egg.js框架入门与实战> 课程地址:https://www.imooc.com/learn/1185 第一章 课程导学 01-01 课程介绍 一. ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计 1
前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...
- Egg.js基础教程
文章目录 初始化Egg项目 Egg的目录结构 app目录 config目录 路由与控制器 添加一个controller和router 路由获取参数 get请求 post请求 简写形式 插件 nunju ...
- egg.js连接mysql数据库遇到的问题
最近在策划写一个博客采用前后端分离模式,前端使用vue后端使用egg.js,我也是刚开始学习egg.js,所以会将自己踩的坑都记录下来. 首先介绍下后端为什么采用egg.js吧,之前我是学习了koa2 ...
最新文章
- 基于WTL自绘 - 表情选择界面
- sql中exists,not exists的用法
- 设计模式:接口隔离原则
- 32接上拉5v_51单片机P0口上拉电阻的选择
- matlab填充点面,求大神指点绘制空间内散点图的包络面,,,散点程序如下
- 颜宁问4对科研夫妻:男女搭配,如何不累?
- 【中生代技术社区内推】
- 基于BERT 的中文数据集下的命名实体识别(NER)
- G711 G723 G729线路占多少带宽问题
- Airtest多点触控测试
- cisco(思科)交换机配置篇【二】
- 20系列和30系列显卡下的tensorflow-gpu环境配置,避坑指南
- GlusterFS概述
- web快速入门之基础篇-html:2、基本标签之标题标签、段落标签、换行标签
- 信息学奥赛一本通提高组2085:【21NOIP提高组】棋局
- 拜托,面试请不要再问我 Spring Cloud Alibaba 底层原理
- 【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版
- 你好,机器作诗了解一下
- 免费SIP软交换云总机IPPBX
- 机器学习算法实现解析——word2vec源码解析
热门文章
- Apache基金会获得Pineapple基金88.34比特币捐赠
- 【优化调度】基于matlab一致性算法求解电力系统分布式经济调度优化问题【含Matlab源码 770期】
- 【语音识别】基于matlab带动量项的BP神经网络语音识别【含Matlab源码 430期】
- SPSS 相关分析(图文+数据集)【SPSS 023期】
- 语音库构建_推动数据采用,以通过语音接口构建更好的产品
- roc-auc_AUC-ROC技术的局限性
- Numpy中常用函数
- java 邮件内嵌图片_(二)JavaMail创建包含内嵌图片的邮件
- php完成润年判定程序编写,python闰年判定代码是什么
- python数据读写 panda(to_csv和read_csv)【读取dat文件】【写入dat文件】【非csv文件并且有多列数据时】