我正在为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();
在admin_middleware
中使用server.js
时,我得到了被拒绝的承诺:
.catch(e => {
res.status(401).send();
})
这意味着对于用户not authorized
和“禁止访问”,我都返回401状态代码。
我想在一种情况下返回403,在另一种情况下返回401。解决办法是什么?
谢谢!
答案 0 :(得分:2)
如评论中所建议。您可以这样拒绝自定义错误:
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();
})
};