'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiemoiLCJpYXQiOjE1NjY1Mjc1ODB9.zp0xQbQQcK-xn7wDXFBEi64sNPqnhDCNCLh0QyqP8zI'
使用的是base64UrlEncode编码
npm i jsonwebtoken -S
const jwt = require('jsonwebtoken')
const token = jwt.sign({name: 'zj'}, 'secret')
// 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiemoiLCJpYXQiOjE1NjY1Mjc1ODB9.zp0xQbQQcK-xn7wDXFBEi64sNPqnhDCNCLh0QyqP8zI'
const sign = jwt.verify(token, 'secret')
// { name: 'zj', iat: 1566527580 }
const jsonwebtoken = require('jsonwebtoken')
const auth = async (ctx, next) => {
const { authorization = '' } = ctx.request.header
const token = authorization.replace('Bearer ', '')
try {
const user = jsonwebtoken.verify(token, secret)
ctx.state.user = user
} catch (e) {
ctx.throw(401, e.message)
}
await next()
}
...
router.del('/:id', auth, del)
const jwt = require('koa-jwt')
const auth = jwt({secret})
...
router.del('/:id', auth, del)
// 登录接口
...
const token = jsonwebtoken.sign({name, _id}, secret, {expiresIn: '1d'}) // expiresIn 过期时间1天
ctx.body = { token }
async checkOwner (ctx, next) {
if (ctx.params.id !== ctx.state.user._id) {
ctx.throw(403, '没有权限')
}
await next()
}
...
router.del('/:id', auth, checkOwner, del)