koa2中使用jwt生成TOKEN

  1. 安装插件

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

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

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

  3. 在登录成功后返回token

    1
    2
    3
    4
    5
    6
    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的信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // 获取用户信息
    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'
    }
    }
    })