使用 hapijs 为所有路由返回 401 错误

Returning 401 error for all routes with hapijs

我们正在使用 Hapi JS 作为我们的休息服务器。我们将用户的身份验证令牌存储在 Redis 上。现在,如果由于某种原因 node 与 Redis 失去连接,我们需要从所有路由向所有客户端发送 return 401 Authorization failed 错误,以便客户端可以自动注销.

那么,有没有办法在不更改路由处理程序函数中的代码的情况下从所有路由 return 401?

您应该在您的应用程序使用的身份验证插件中执行此操作。看一下 hapi-auth-basic 的实现:https://github.com/hapijs/hapi-auth-basic/blob/master/lib/index.js

如果您查看方案,您必须定义一个接受请求和回复的身份验证方法。这是你应该检查 redis 的授权令牌的地方。如果连接不可用,您应该

return reply(Boom.unauthorized('Authorization failed', 'Basic'));

希望对您有所帮助。

您可以使用 Hapi server extension event 'onRequest'.

var hapi = require('hapi');
var Boom = require('boom');

var server = new hapi.Server();
//Configure your server

//Add an extension point

server.ext('onRequest', function (request, reply) {
    var status;
    //Check status of redis instance

    if (status) {
        //Redis is running, continue to handler
        return reply.continue();
    } else {
        //Redis is down, reply with error
        return reply(Boom.unauthorized('Auth server is down'));
    }
});

这可能不是您验证 redis 实例状态的方式,但我希望您能明白这一点。

可以查找其他各种扩展点 here