安装

npm install egg-jwt --save

配置

// config/config.default.js
config.jwt = {
secret: 'zidingyi', // 自定义 token 的加密条件字符串
};
// config/plugin.js
jwt: {
enable: true,
package: 'egg-jwt',
},

使用

  • 生成token
 // login.js
const token = ctx.app.jwt.sign({
...ctx.request.body,
}, this.app.config.jwt.secret, {
expiresIn: '600m', // 时间根据自己定,具体可参考jsonwebtoken插件官方说明
});
  • 验证token

验证token通常会写一个中间件,在需要验证的路由里引用中间件即可

'use strict';

module.exports = options => {
return async function jwt(ctx, next) {
// 拿到传会数据的header 中的token值
const token = ctx.request.header.authorization;
const method = ctx.method.toLowerCase();
// 当前请求时get请求,执行接下来的中间件
if (method === 'get') {
await next();
// 当前token值不存在的时候
} else if (!token) {
if (ctx.path === '/api/v1/register' || ctx.path === '/api/v1/login/account') {
await next();
} else {
ctx.throw(401, '未登录, 请先登录');
ctx.body = {
code: 50008,
};
}
} else { // 当前token值存在
let decode; // 解码token
decode = await ctx.app.jwt.verify(token, options.secret, (err, decoded) => {
if (err) {
if (err.name === 'TokenExpiredError') { // token过期
return 'TokenExpiredError';
} else if (err.name === 'JsonWebTokenError') { // 无效的token
return 'JsonWebTokenError';
}
} else {
return decoded;
}
}); if (decode === 'TokenExpiredError') {
ctx.body = {
code: 401,
msg: '登录过期,请重新登录',
};
return;
} if (decode === 'JsonWebTokenError') {
ctx.body = {
code: 50012,
msg: 'token无效,请重新登录',
};
return;
}
await next();
}
};
};
  • 使用中间件鉴权
// router.js
const jwt = app.middleware.jwt(app.config.jwt); router.post('/getHousePropertyFee', jwt, controller.getHousePropertyFee.index);

前端处理

  • 获取token

login登录成功后,后台会把token发送给前端,前端可以将token缓存至cookie中。

  • 发送token

封装axios,每次请求去cookie中拿token,并根据后端返回的状态码给予用户提示,比如:token已过期等。。。

// 封装axios请求
service.interceptors.request.use(
config => { if (store.getters.token) {
config.headers['authorization'] = getToken()
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
// axios 拦截错误码
if (res.code === 50016) {
MessageBox.confirm(res.msg, '提示', {
showClose: false,
showCancelButton: false,
closeOnClickModal: false,
closeOnPressEscape: false,
confirmButtonText: '确定',
type: 'warning'
})
}

egg-jwt的使用的更多相关文章

  1. jwt 登录

    /* eslint-disable */ 'use strict'; const Controller = require('egg').Controller; const jwt = require ...

  2. 手写jwt验证,实现java和node无缝切换

    前言 前端时间和我朋友写了一个简易用户管理后台,功能其实很简单,涉及到的技术栈有:vue+elementUI,java+spring MVC以及node+egg,数据库用的mysql,简单方便. 一开 ...

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

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

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

    本文将介绍如何基于 Egg.js 和 Serverless 实现一个后台管理系统 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个 ...

  5. 使用egg.js开发后端API接口系统

    什么是Egg.js Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本.详细的了解可以参考Egg.js的官网:https:// ...

  6. 看图理解JWT如何用于单点登录

    单点登录是我比较喜欢的一个技术解决方案,一方面他能够提高产品使用的便利性,另一方面他分离了各个应用都需要的登录服务,对性能以及工作量都有好处.自从上次研究过JWT如何应用于会话管理,加之以前的项目中也 ...

  7. JWT实现token-based会话管理

    上文<3种web会话管理的方式>介绍了3种会话管理的方式,其中token-based的方式有必要从实现层面了解一下.本文主要介绍这方面的内容.上文提到token-based的实现目前有一个 ...

  8. 用JWT来保护我们的ASP.NET Core Web API

    在上一篇博客中,自己动手写了一个Middleware来处理API的授权验证,现在就采用另外一种方式来处理这个授权验证的问题,毕竟现在也 有不少开源的东西可以用,今天用的是JWT. 什么是JWT呢?JW ...

  9. Laravel-lumen 配置JWT

    具体步骤参照: [ JWT & Lumen ] 第一步 在项目根目录 执行命令 composer require tymon/jwt-auth第二步 在 bootstrap/app.php 的 ...

  10. .net core Jwt 添加

    Jwt 已经成为跨平台身份验证通用方案,如不了解请关注:https://jwt.io/. 为了和微软其他验证模块有个比较好的衔接,项目中采用了微软开发的jwt组件: System.IdentityMo ...

随机推荐

  1. IDEA使用MybatisCodeHelperPro插件

    下载MybatisCodeHelperPro: 链接:https://pan.baidu.com/s/1H6csq9STVh0Ofldh6V6gxQ提取码:r2g3 IDEA安装本地插件: ctrl+ ...

  2. Base64补充

    1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要. 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只用65个字符就能表示的文本文件. 65字 ...

  3. JAVA变量初始化赋值问题

    感谢大佬:https://www.cnblogs.com/znsongshu/p/6282672.html 在Java中,null值表示引用不指向任何对象.运行过程中系统发现使用了这样一个引用时·可以 ...

  4. VUE3 之 动态组件 - 这个系列的教程通俗易懂,适合新手

    1. 概述 暗示效应告诉我们: 巧妙的暗示会在不知不觉中剥夺我们的判断力,对我们的思维形成一定的影响,造成我们行为的些许改变或者偏差. 例如你的朋友说你脸色不太好,是不是病了,此时,你可能就会感觉浑身 ...

  5. Hadoop文件操作常用命令

    1.创建目录 #hdfs dfs -mkidr /test 2.查询目录结构 #hdfs dfs -ls / 子命令 -R递归查看//查看具体的某个目录:例如#hdfs dfs -ls /test 3 ...

  6. Python支付宝单笔转账接口

    开发信息 接口加签方式为证书模式 证书模式好处是可以使用支付宝的转账到支付宝账户,也就是提现功能,公钥模式不能实现转账到支付宝账户. 此DEMO利用单笔转账到支付宝账户接口[提现功能]用户可以通过此D ...

  7. 卡特兰数是我见过第二神奇的东西//下一个是stirling数列

    自从上次斐波那契的总结后,今天有一次遇上了正宗卡特兰数. 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, ...

  8. 字符编码和Python代码操作文件

    字符编码和Python代码操作文件 读写模式之a模式 # a模式 只追加模式 # 路径不存在:自动创建 with open(r'a.txt','a',encoding='utf8') as f: pa ...

  9. PyCharm编程软件详细安装教程

    PyCharm编程软件安装教程&破解 一.官网下载软件 1. 网页搜索进入PyCharm官网下载页面(https://www.jetbrains.com/pycharm/download/ ) ...

  10. matlab文件处理

    1.读取文件(按行读取) fid = open('file_name');while(~feof(fid)) line = fgetl(fid); % 读取一行数据 endfid.close(); 2 ...