koa2 jwt实践中的问题总结

前言

刚学完koa2不久,就想着用koa2这个神器写个接口玩玩吧,然后写的过程中遇到了一些阻碍,特此总结。

引入koa-jwt和jsonwebtoken

我们先npm i koa-jwt jsonwebtoken

安装完毕后,我们需要在app.js中引入koa-jwt

const koaJwt = require('koa-jwt');

编写中间件

第二步我们需要在app.js中编写如下代码

app.use(async (ctx, next) => {
  await next().catch((err) => {
    if (err.status === 401) {
      ctx.status = 401;
      ctx.body = {
        data: null,
        message: 'token无效',
        status: false
      };
    } else {
      throw err;
    }
  });
});
app.use(koaJwt({
  secret: 'WFT_DSA'
}).unless({
  path: [/^\/api\/user\/login/, /^\/api\/user\/register/, /^\/api\/user\/getSMS/,/^\/api\/user\/forget/]
}));

koa-jwt给我们提供了一个unless方法,里面可以传入不需要校验token的api接口地址,上面我们传入了login,register,getSMS,forget这几个接口地址,那么也就是说除了这几个以外的接口koa-jwt都会主动的帮我们校验token,如果过期或不存在就直接返回401(app.use)里面就是我们写的401中间件。(这里的secret是加密时用的密钥,也就是说要和下面讲到的生成jwt里面的secret保持一致)

如何生成jwt

我们在用户登录成功时需要给前端返回一个token,那我们可以在登录成功时把用户的信息存到token加密后传给前端

具体代码:
我们在user的路由下引入jsonwebtoken

const jwt = require('jsonwebtoken');
const secret = 'WFT_DSA';
const gen_token = (info) => {
  return jwt.sign({
    user: info.user,
    id: info.id
  }, secret, {expiresIn: '24h'});
};

这里我们设置到期时间是24小时,如果直接写数字他的单位是秒

我们用jwt.sign为我们生成了一个token,他的加密密钥是WFT_DSA这个可以随意更改,注意不要泄露出去哦

这样我们就可以在我们想生成token的地方直接调用gen_token方法来生成token
然后用ctx.body返回给前端

结语

到这里就做好了jwt,当然这里并没有做token过期时自动延期的处理,有兴趣的朋友可以交流交流如何实现自动延期?

感谢各位大佬的阅读,如果觉得本文还不错,不妨点个赞?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值