我正在为 admin
用户创建一个中间件:
let admin_middleware = (req, res, next) => {
let token = req.header('x-auth');
User.findByToken(token).then((user) => {
if(!user || user._doc.user_type !== user_roles.admin)
return Promise.reject();
req.user = user;
req.token = token;
next();
}).catch((e) => {
res.status(401).send();
})
};
问题围绕着这行代码:
if(!user || user._doc.user_type !== user_roles.admin)
return Promise.reject();
在 server.js
中使用 admin_middleware
时,我发现了被拒绝的 promise :
.catch(e => {
res.status(401).send();
})
这意味着对于用户 未授权
和“禁止访问”,我返回 401 状态代码。
我想在一种情况下返回 403,在另一种情况下返回 401。解决方案是什么?
谢谢!
最佳答案
如评论中所建议。您可以像这样拒绝自定义错误:
class UnauthorizedError extends Error {}
class ForbiddenError extends Error {}
let admin_middleware = (req, res, next) => {
let token = req.header('x-auth');
User.findByToken(token).then((user) => {
if (!user) return Promise.reject(new UnauthorizedError());
if (user._doc.user_type !== user_roles.admin) return Promise.reject(new ForbiddenError());
req.user = user;
req.token = token;
next();
}).catch((e) => {
if (e instanceof UnauthorizedError) {
res.status(401);
} else if (e instanceof ForbiddenError) {
res.status(403);
} else {
res.status(500);
}
res.send();
})
};
关于node.js - 基于用户角色的中间件返回适当的 HTTP 响应状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52102880/