koa2中koa-jwt的使用

koa-jwt可以验证使用JSON Web Tokens的http 请求。另外基于koa2的koa-jwt去掉了对sign,verify和decode函数的支持。

引入koa-jwt

1
2
3
4
5
//koa-jwt 中间件
npm install -S koa-jwt

//生成token
npm install -S jsonwebtoken

生成token

通过 sign 方法生成token。
jwt.sign(payload, secretOrPrivateKey, [options, callback])

  • payload 可以设置为对象或字符串。
  • secretOrPrivateKey secret的key
1
2
3
const token = require('jsonwebtoken')

token.sign({ id: 123 }, 'A very secret key')

代码显示

访问 http://localhost:3000/page/404 运行结果:

运行结果

token验证

给 /helloworld 加入jwt 验证,当你访问/helloworld 的时候就会自动进行jwt验证

1
2
3
4
5
get('/helloworld', jwt({
secret: 'A very secret key', // Should not be hardcoded
}), async(ctx) => {
ctx.body = 'helloworld page!'
})

如果访问 /helloworld 的时候,没有在header中传入 Authentication 的值,就会出现 Authentication Error 错误,如果传入 Authentication ,可以出现 helloworld page!

1
2
3
4
//Authorization 的值是Bearer <token>
Authorization

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYWRtaW4iLCJpYXQiOjE1MDA0NTgwNTR9.1SDdj8-i2s-BJL5hWVr3CzC80TFhntSobUpSAnH2OVc

运行结果

获取加密字符串中的对象

加密验证通过后可以通过 ctx.state.user 获取之前加密时传递的对象。

1
2
3
4
5
console.log("ctx.state.user:" + JSON.stringify(ctx.state.user));

打印结果:

ctx.state.user:{"id":123,"iat":1500518231}

查看源码

谢谢你请我吃糖果