egg.js jwt 几步实现加解密

摘要:
1.安装npminstall--saveegg-corsegg-jwt2.配置//config/config.default.jsconfig.jwt={secret:'123456',enable:true,//defaultisfalsematch:'/jwt',//optionalexpiresIn:'24h',};//安全配置(https://eggjs.org/zh-cn/core/se

1.安装

npm install --save egg-cors egg-jwt

2.配置

// config/config.default.js
config.jwt ={ secret: '123456', enable: true, //default is false match: '/jwt', //optional expiresIn: '24h', }; //安全配置 (https://eggjs.org/zh-cn/core/security.html config.security ={ csrf: { enable: false, ignoreJSON: true, }, domainWhiteList: [ 'http://localhost:8080' ], //允许访问接口的白名单 }; //跨域配置 config.cors ={ origin: '*', allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH', };

3.路由

'use strict';
module.exports = app =>{
  const { router, controller: { login }, middleware } =app;
  const jwt =middleware.jwtCheck(app.config.jwt);

  router.post(`login`, login.index); // 登录得到 token 等用户信息
  router.get(`login/test`, jwt, login.test); // 解码验证
};

4.登录得到 token 等用户信息

请求(post):http://localhost:7001/login

//controller/login.js
'use strict';

const Controller = require('../core/baseController');
classHomeController extends Controller {

  //登录,验证,成功发token
  asyncindex() {
    const { ctx, app } = this;
    const req =ctx.request.body;
    const errArr =app.validator.validate({
      username: 'string',
      password: 'string',
    }, req);

    if (errArr) { //非空验证
      this.$error(JSON.stringify(errArr));
      return;
    }

    try{
      //查库验证
      const data = await ctx.model.User.findAll({ where: req });

      if (data.length > 0) {

        const user = data[0];
        const { jwt: { secret, expiresIn } } =app.config;
        //需传 secret 过期时间
        const token =app.jwt.sign({
          id: user.id,
        }, secret, {
          expiresIn,
        });

        this.$success({ token, user });

      } else{
        this.$error('用户名或密码不正确');
      }
    } catch(err) {
      this.$error(err);
    }

  }

  asynctest() {
    const { ctx } = this;
    ctx.body = { code: 201, msg: '验证成功', data: ctx.state.user };
    console.log('
 user +++', ctx.state.user);
  }

}

module.exports = HomeController;

5.解码验证

请求(get):http://localhost:7001/login/test

// middleware/jwtCheck.js
'
use strict'; module.exports = options =>{ return asyncfunction jwtErr(ctx, next) { const headerStr =ctx.request.header.authorization; if(headerStr) { try{ //解码token,需传加密时的 secret const decode =ctx.app.jwt.verify(headerStr, options.secret); ctx.state.user = decode; //信息存一下,这步很重要,业务里要用 awaitnext(); } catch(error) { ctx.status = 401; //翻译错误码 let message =error.message;ctx.body ={ code: -1, msg: message, }; return; } } else{ ctx.status = 401; ctx.body ={ code: -1, msg: 'no header token', }; return; } }; };

以上几步,用egg-jwt 实现登录获取 token ,然后传 token验证身份,并存在 ctx.state.user为后面业务里用

.

免责声明:文章转载自《egg.js jwt 几步实现加解密》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS布局:水平居中图说流程管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RenderSprite小记

类型定义: 1 /** @private */ 2 public static const IMAGE:int = 0x01; 3 /** @private */ 4 public static const ALPHA:int = 0x02; //透明度变化 5 /** @private...

Vmware workstation虚拟机导入到esxi虚拟机

VMware Workstation 与 ESXi 的主要区别 VMware Workstation是直接在windows系统下安装软件,安装后再在软件里面安装虚拟机,而ESXi相当于一个linux操作系统,直接像安装linux系统一样安装后,再在另一台windows电脑上通过web或者安装vcenter连接访问esxi,然后再安装和管理虚拟机。    ...

C#使用WebService 常见问题处理

C#使用WebService   一、新建webservice 新建项目→asp.net Web服务应用程序 或者在现有项目中 点击右键 新建web服务程序asmx 只要在webservice类里面 的方法 标注为【WebMethod】就成为别人可以调的方法                        如果要返回DataTable   只要 Da...

Android智能指针sp wp详解

研究Android的时候,经常会遇到sp、wp的东西,网上一搜,原来是android封装了c++中对象回收机制。说明:1. 如果一个类想使用智能指针,那么必须满足下面两个条件:a. 该类是虚基类RefBase的子类或间接子类b. 该类必须定义虚构造函数。如virtual ~MyClass(); 2. 本文以类BBinder来进行说明,其余类使用sp或wp...

win2012基础服务

目录 1 防火墙 2 远程连接 win同时只能单用户登录 rdesktop&mstsc 单用户多连接 3 系统准备工具sysprep封装系统-安全策略 4 cmd常用命令 5 文件共享 samba协议 基于smb右键共享 服务器管理器smb/nfs 6 AD域 2012r2安装AD域 新建组和用户 win7加入域 域用户凭据...

Windows App开发之集成设置、帮助、搜索和共享

应用设置和应用帮助 ”设置“合约 上一节中我们学习了如何将应用设置保存到本地,这种方式是通过在App内添加设置选项,这里还有一种方式。微软将其称为“设置”合约,并且所有的Windows应用商店应用都将自动配合这种合约。但是应用自带的这种设置如果不做任何修改可谓毫无作用。而我们添加这些设置则可以让应用更加个性化哦。 SettingsFlyout...