Koa2-CJS/examples/dbs/mariadb/middlewares/auth.middleware.js

49 lines
1.1 KiB
JavaScript

const jwt = require('jsonwebtoken')
const { JWT_SECRET } = require('../config/config.default')
const {
tokenExpiredError,
invalidToken,
hasNotAdminPermission,
} = require('../constant/err.type')
const auth = async (ctx, next) => {
const { authorization = '' } = ctx.request.header
const token = authorization.replace('Bearer ', '')
// console.log(token)
try {
// user中包含了payload的信息(id, user_name, is_admin)
const user = jwt.verify(token, JWT_SECRET)
ctx.state.user = user
} catch (err) {
switch (err.name) {
case 'TokenExpiredError':
console.error('token已过期', err)
return ctx.app.emit('error', tokenExpiredError, ctx)
case 'JsonWebTokenError':
console.error('无效的token', err)
return ctx.app.emit('error', invalidToken, ctx)
}
}
await next()
}
const hadAdminPermission = async (ctx, next) => {
const { is_admin } = ctx.state.user
if (!is_admin) {
console.error('该用户没有管理员的权限', ctx.state.user)
return ctx.app.emit('error', hasNotAdminPermission, ctx)
}
await next()
}
module.exports = {
auth,
hadAdminPermission,
}