mirror of
https://github.com/chaos-zhu/easynode.git
synced 2026-10-07 13:07:53 +08:00
52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
const { apiPrefix } = require('../config')
|
|
const { verifyAuthSync, enumLoginCode } = require('../utils/verify-auth')
|
|
|
|
let whitePath = [
|
|
'/login',
|
|
'/get-pub-pem'
|
|
].map(item => (apiPrefix + item))
|
|
logger.warn('路由白名单:', whitePath)
|
|
|
|
const useAuth = async (ctx, next) => {
|
|
const { request, res, cookies } = ctx
|
|
const { path, headers } = request
|
|
if (whitePath.includes(path)) {
|
|
logger.info('白名单路由: ', path)
|
|
return await next()
|
|
}
|
|
logger.info('验证权限路由: ', path)
|
|
|
|
const { token } = headers
|
|
if (!token) return res.fail({ msg: '未登录(token)', status: 401 })
|
|
|
|
const session = cookies.get('session')
|
|
if (!session) return res.fail({ msg: '未登录(session)', status: 401 })
|
|
// 验证token
|
|
const { code } = await verifyAuthSync(token, session)
|
|
let failMsg = ''
|
|
switch (code) {
|
|
case enumLoginCode.SUCCESS:
|
|
return await next()
|
|
case enumLoginCode.EXPIRES:
|
|
failMsg = 'TOKEN已过期, 请重新登录'
|
|
break
|
|
case enumLoginCode.SID_EXPIRES:
|
|
failMsg = 'SESSION过期, 请重新登录'
|
|
break
|
|
case enumLoginCode.ERROR_TOKEN:
|
|
failMsg = 'TOKEN校验失败, 请重新登录'
|
|
break
|
|
case enumLoginCode.REVOKED_TOKEN:
|
|
failMsg = 'TOKEN已被注销, 请重新登录'
|
|
break
|
|
case enumLoginCode.ERROR_UID:
|
|
logger.error('用户id校验失败(可能存在外部攻击): ', path)
|
|
failMsg = 'UID错误!!!'
|
|
break
|
|
}
|
|
logger.warn('验证失败: ', code, failMsg)
|
|
return res.fail({ msg: failMsg || '身份验证失败(未知错误!)', status: 403 })
|
|
}
|
|
|
|
module.exports = useAuth
|