egg-jwt egg jwt 使用

1,安装egg-jwt

npm install egg-jwt --save

2,配置

config/plugin.ts

import { EggPlugin } from 'egg';

const plugin: EggPlugin = {
  jwt: {
    enable: true,
    package: "egg-jwt"
  },
};

export default plugin;

config/config.default.ts 

config.jwt = {
  secret: "ylw"//自定义 token 的加密条件字符串
};

如果使用了ts,需要在根目录下的 typings/index.d.ts 文件里声明一个 any 类型,否则会类型错误: 

import 'egg';

declare module 'egg' {
    interface Application {
        jwt: any;
        mysql:any;
    }
}

3,使用

在controller中使用:

login.ts

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

 调用接口应该会在控制台拿到token:

 4,中间件

中间件可以减少代码,方便使用

 middleware/jwt.ts

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

5,鉴权 

在router中对要鉴权的路由进行注册:

const jwt = app.middleware.jwt(app.config.jwt);
  router.get('/', jwt, controller.home.index);

在要调用的接口header加入刚才输入获取的token:

{
Authorization:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjExMjMzMyIsInBhc3N3b3JkIjoiMTIzNDEyIiwiaWF0IjoxNTgwMzgwNjA3LCJleHAiOjE1ODAzODQyMDd9._qBIrfaiELVdxD6MmWFAXJXDM6WDP3DjAfqk-cpGjl4
}

 6,结果

如果调用接口不传:

正确填写token:

 

 将在控制台打印token存的内容

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值