我使用HapiJS作为我的REST API。我还使用范围功能来实现对资源的简单基于角色的访问。示例路由配置对象如下所示:
{
method: 'GET',
path: '/users/{userID}',
config: {
auth: {
access: {
scope: ['user-{params.userID}']
}
},
handler: getUserHandler
}
}
默认情况下,当前经过身份验证的用户没有scope
访问给定端点所需(例如,scope: 'user-1'
尝试获取/users/1
时),那么错误响应返回:
{"statusCode":403,"error":"Forbidden","message":"Insufficient scope"}
我想要的是用自定义状态代码替换此403
错误和错误消息 - 我想要返回404 Not Found
。我想这样做仅适用于某些端点。这可能吗?
答案 0 :(得分:1)
您可以通过server.ext('onPostHandler', (request, reply) => {...
您可以在请求中获取route
和response
对象。
response
对象包含isBoom
,如果是,则应该获得response.output.statusCode
,如果它是403
,您可以验证它。
route
对象包含path
,如果它是您想要的端点,您可以验证它。
这样的事情:
server.ext('onPostHandler', (request, reply) => {
const response = request.response;
if (response.isBoom &&
response.output.statusCode === 403 &&
request.route.path === 'your_endpoint') {
// your code here
}
return reply.continue();
});