为什么我的token总是报401 认证失败?
来源:7-8 用户列表接口实现&联调

慕粉3946981
2022-02-26
前端发送请求
getUserList(params){ // 获取用户列表数据
return request({
url: '/users/list',
method: 'get',
data: params,
mock: false,
})
},
后端处理请求
router.prefix('/users')
router.get('/list', async ctx => {
console.log('请求数据库列表数据');
})
日志处理中间件
// 处理日志信息
app.use(async (ctx, next) => {
let obj = ctx.request.body || ctx.request.query
obj.method = ctx.request.method
obj.url = ctx.request.url
obj.userAgent = ctx.request.headers['user-agent']
log4js.info(JSON.stringify(obj))
console.log('中间件中查看token', ctx.request.headers.authorization); // 可以打印出 token
await next().catch(err => {
if (err.status == 401) {
console.log('捕获到了 401 token 认证失败')
ctx.status = 200
ctx.body = utils.fail('Token认证失败', utils.CODE.AUTH_ERROR) // 处理token失败
} else {
throw err
}
})
})
- 在日志中间件中可以通过
ctx.request.headers.authorization
打印出 token - 但执行了
await next().catch(err => {}
这个 catch 中的回调函数,我输出了 err 打印如下错误
UnauthorizedError: Bad Authorization header format. Format is "Authorization: Bearer <token>"
我不知道该怎么排查及解决这个错误,我明明已经从前端的请求头中拿到了 token 为什么验证失败了?
写回答
2回答
-
主要是因为我们后端用的插件会拦截前端发送过来的请求头,必须包含Bearer
00 -
慕粉3946981
提问者
2022-02-26
搞定了,前端axios拦截这块关于token 必须这样设置
headers.authorization = `Bearer ${token}`
00