刚学完koa2不久,就想着用koa2这个神器写个接口玩玩吧,而后写的过程当中遇到了一些阻碍,特此总结。javascript
咱们先npm i koa-jwt jsonwebtoken
前端
安装完毕后,咱们须要在app.js中引入koa-jwt
java
const koaJwt = require('koa-jwt');
web
第二步咱们须要在app.js中编写以下代码npm
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
保持一致)json
咱们在用户登陆成功时须要给前端返回一个token,那咱们能够在登陆成功时把用户的信息存到token加密后传给前端api
具体代码: 咱们在user的路由下引入jsonwebtoken
app
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小时,若是直接写数字他的单位是秒less
咱们用jwt.sign为咱们生成了一个token,他的加密密钥是WFT_DSA
这个能够随意更改,注意不要泄露出去哦koa
这样咱们就能够在咱们想生成token的地方直接调用gen_token
方法来生成token 而后用ctx.body
返回给前端
到这里就作好了jwt,固然这里并无作token过时时自动延期的处理,有兴趣的朋友能够交流交流如何实现自动延期?
感谢各位大佬的阅读,若是以为本文还不错,不妨点个赞👍