koa2中使用jwt生成TOKEN

  1. 安装插件

    yarn add koa-jwt jsonwebtoken
  2. 注册中间件

    const jwtKoa = require('koa-jwt')
    // jwt
    app.use(
      jwtKoa({
        secret: SECRET
      }).unless({
        path: [/^\/users\/login/] // 定义那些目录忽略jwt验证
      })
    )

    SECRET是一个加密的密钥,字符串类型。

  3. 在登录成功后返回token

    const jwt = require('jsonwebtoken')
    const { SECRET } = require('../conf/constants')
    let token
    if (userInfo) {
        token = jwt.sign(userInfo, SECRET, { expiresIn: '1h' })
    }

Koa2中获取token中的用户信息

  1. 在请求时在请求头加入字段Authorization,值为token值Bearer [TOKEN]

    image-20201217093715898

  2. 获得token的信息

    // 获取用户信息
    router.get('/getUserInfo', async function (ctx, next) {
        const token = ctx.header.authorization
        // 也可以获得session解密后的信息
        console.log(ctx.state)
        // 手动对jwt解密
        try {
            const payload = await verify(token.split(' ')[1], SECRET)
            ctx.body = {
                errno: 0,
                userInfo: payload
            }
        } catch (ex) {
            ctx.body = {
                errno: 0,
                msg: 'verify token failed'
            }
        }
    })