我们正在使用 Hapi JS 作为我们的休息服务器。我们为Redis上的用户存储身份验证令牌。现在,如果由于某种原因 node 失去与Redis的连接,我们需要向所有路由中的所有客户端返回401 Authorization failed
错误,以便客户端可以自动注销。
那么,有没有办法在不更改路由处理函数中的代码的情况下从所有路径返回401?
答案 0 :(得分:0)
您应该在应用使用的auth插件中执行此操作。看一下hapi-auth-basic实现:https://github.com/hapijs/hapi-auth-basic/blob/master/lib/index.js
如果您查看该方案,则必须定义一个接受请求和回复的身份验证方法。这是您应该检查redis以获取身份验证令牌的位置。如果连接不可用,您应该
return reply(Boom.unauthorized('Authorization failed', 'Basic'));
希望这有帮助。
答案 1 :(得分:0)
您可以使用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。