egg.js的egg-jwt生成token做成中间件

摘要:
做egg.js项目时想生成token,用egg-jwt插件最好了,但是不小心很容易踩到坑。

做egg.js项目时想生成token,用egg-jwt插件最好了,但是不小心很容易踩到坑。主要主要几点:

1、把csrf关掉  

config.security ={
    csrf: {
      enable: false,
      ignoreJSON: true}
};

2、验证token写成中间件

3、前端交互时在headers传token给后台  

headers: {'Authorization': `${sessionStorage.getItem('token')}`} //登录时把后台传过来的token传到sessionStorage里
注意:千万不要加Bearer,
写成headers: {'Authorization': `Bearer ${sessionStorage.getItem('token')}`}会报"message":"invalidtoken"错误。

以下是大概步骤:

1、安装egg省略,可参考:https://www.cnblogs.com/zzwlong/p/13555926.html

2、安装egg-jwt:

npm install egg-jwt --save 或 cnpm install egg-jwt --save

3、配置jwt

1) configplugin.js
jwt: { enable:
true, package: 'egg-jwt', },
2) configconfig.default.js
config.jwt = { //jwt配置项 secret: "123456" }

4、扩展那里的helper.js加添加生成token的方法

appextendhelper.js
//
生成token getToken(value) { return this.app.jwt.sign(value, this.app.config.jwt.secret); }

5、在egg后台登录页引入生成token的方法,并在authorization设置token  

'use strict';

const Controller = require('egg').Controller;

class LoginController extends Controller {
    async login() {
    const { ctx, app } = this;
    const { username,password } =ctx.request.body;
    const token =ctx.helper.getToken();
    ctx.set({'authorization':token})
    const result =await ctx.service.login.login(username,password);
    ctx.body =result;
    }
}

module.exports = LoginController;

6、封装验证token的中间件

//middleware/jwtErr.js
module.exports = (options) =>{
  return async functionjwtErr(ctx, next) {
      const token =ctx.request.header.authorization;
      let decode = '';
      if(token) {
        try{
          //解码token
          decode =ctx.app.jwt.verify(token, options.secret);//验证token
          await next();
          console.log('decode======>',decode);
        } catch(error) {
          ctx.status = 401;
          ctx.body ={
            message: error.message,
          };
          return;
        }
      } else{
        ctx.status = 401;
        ctx.body ={
          message: '没有token',
        };
        return;
      }
    };
}

7、postman请求,请求时headers记得token前不要加Beare和空格

egg.js的egg-jwt生成token做成中间件第1张

差不多就是这样了,网上好多用egg-jwt的,但好多都是前端请求接口时headers加token时加Bearer 的,我试了会报"message":"invalidtoken"错误,得去掉。

by the way 中间件可以在configconfig.default.js这个文件配置

免责声明:文章转载自《egg.js的egg-jwt生成token做成中间件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇轻松实现突破网管限制(SoftEther实际应用)用node生成svg图片下篇

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

相关文章

微信开放平台微信公众平台微信小程序openid合法性验证

我们获得了微信用户的openid,往往要把openid保存到服务器中的数据库里。有些场景需要检验openid的合法性,官方给了相应的验证接口如下: https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=openid 填入正确的 ACCESS_TOKEN 和 open...

苹果APNs’ device token特性和过期更新

APNs全名是Apple Push Notification Service。用iPhone的应该都习惯了,每次安装完一个新应用启动后,几乎都会弹出个警告框,“XXX应用”想要给您发送推送通知。这个警告框的权限申请就是为了APNs推送,用户授权后,应用提供商就可以通过APNs给用户推送消息。APNs的工作机制简单来说可以分为两步,第一步是注册推送服务从AP...

微信分享接口的java开发的一些小步骤

1.配置接口信息进行验证 代码如下:     /**     * 访问没认证的地址跳转     *     * @param request     * @return 登录页面     * @throws Exception     */    @RequestMapping(value = "/checkWxDomainUrl", method =...

HTTP认证方式与https简介

HTTP认证与https简介# HTTP请求报头: Authorization    [ˌɔ:θəraɪˈzeɪʃn] HTTP响应报头: WWW-Authenticate    [ɔ:ˈθentɪkeɪt] HTTP认证是基于质询/回应(challenge/response)的认证模式。 HTTP认证 BASIC认证 BASIC认证概述 当一个客户端向...

微信公众号开发之获取oppenid和用户基本信息

前言: 在微信公众号请求用户网页授权之前,开发者需要先在自己的公众平台配置好基本配置,修改授权回调域名JS安全域名。并且需要先获取到全局access_token,这里不对全局access_token的获取做详细讲解,可以参考微信公众号开发文档获取,access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开...

浅谈json web token及应用

Json Web Token (JWT),是一个非常轻巧的规范,这个规范允许在网络应用环境间客户端和服务器间较安全的传递信息。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。 在web应用中,我们提供的API接口,通过GET或者...