安装

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. 微服务中的CAP原则

    CAP原则:指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三个要素最多同时实现两点不可能同时实 ...

  2. Java 变量的声明及初始化

    格式: 数据类型 变量名字1 , 变量名字2 ,--变量名字n ; 案例: int i 声明了一个整形的变量. double d 声明了一个double数据类型的变量 float  f 声明了一个fl ...

  3. pageX的兼容性处理1

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 【转】Python 并行分布式框架 Celery

    原文链接:https://blog.csdn.net/freeking101/article/details/74707619 Celery 官网:http://www.celeryproject.o ...

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

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

  6. Java多态、向上转型、向下转型知识分享(讲解全面)

    多态(方法的多态.对象的多态) 方法的多态 重写的多态(重要):子类继承父类,因此子类拥有父类属性和方法,如果子类重写父类方法,那么父类调用该方法的时候就会检查子类是否重写该方法,子类重写了就调用子类 ...

  7. 从零开始学mitmproxy抓包工具

    Man In The Middle mitm是Man In The Middle的首字母缩写,意思是位于中间的人,表明mitmproxy是一个代理,可以拦截请求,实现网络抓包.知名的网络抓包工具有Fi ...

  8. Spring是什么? 核心总结

    Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.  然而,Spring ...

  9. #刷题记录--剑指 Offer 07. 重建二叉树

    输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 抓住一点,通过递归进行节点创建时,是按照 前序遍历数组 进行创建的. 根节点,根节点的左 ...

  10. 用eclipse写jsp报以下错误

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ tag ...