egg框架(一)整合jwt

1.安装依赖

 npm install egg-cors egg-jwt --save

2.在登陆方法中生成token

public async login() {
   const { ctx ,app} = this;
   // 获取用户端传递过来的参数,不同的参数传递获取方式不一
   const data = ctx.request.body;
   console.log(data);
   if(data){
     const token = app.jwt.sign({
       username: data.username, // 需要存储的 token 数据
       //......
     }, app.config.jwt.secret);
     // 返回 token 到前端
     ctx.body = token;
   }
 }

3.修改配置文件

config/plugin.ts

const plugin: EggPlugin = {
  // static: true,
  // nunjucks: {
  //   enable: true,
  //   package: 'egg-view-nunjucks',
  // },
  jwt: {
    enable: true,
    package: "egg-jwt"
  },
  cors: {
    enable: true,
    package: 'egg-cors',
  }
};

config/config.default.ts

// 不需要验证token的路由
  config.routerAuth = ['/system/login', '/system/imageCode', "/system/imageCode"]
   config.jwt = {
    secret: "sue1sue1sue",//自定义 token 的加密条件字符串
  };
  config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true
    },
  };
  // add your egg config in here, 使用的中间件,这里我们要用自己写的jwt验证
  config.middleware = ['auth'];

4.在app\middleware下面新建一个ts文件

module.exports = (options, app) => {
  if(options.size>0) console.log(options);
  return async function (ctx, next) {
    //拿到不需要验证的token的路由
    const routerAuth = app.config.routerAuth;
    //获取当前路由
    let url = ctx.url;
    url = url.split("?")[0]
    //判断当前路由是否需要验证token
    const flag = routerAuth.includes(url)
    if (flag) {
      await next();
    } else {
      //获取token,如果没有传入token,则为空
      const token = ctx.headers.authorization ? ctx.headers.authorization : '';
      token.substring(7) //把Bearer 截取掉,解析的时候不需要加上Bearer
      // 解析token
      try {
        const decode = await app.jwt.verify(token, app.config.jwt.secret);
        ctx.state.userinfo = decode;
        await next();
      } catch (err) {
        ctx.status = 401;
        ctx.body = {
          code: 401,
          message: 'token失效或解析错误',
          data: null
        }
      }
    }
  }
}

这样一来,所有除了在白名单里面的api都会被拦截验证token。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值