我在Kraken项目中使用Passport进行身份验证。 当我调用authenticate时,我传递“failWithError:true”,因此将错误传递给“next”回调。然后我在config.json中声明了一个errorHandler中间件:
"errorHandler": {
"priority": 130,
"module": "path:./lib/errorHandler"
}
我的问题是护照直接返回错误,所以我猜这是优先考虑的问题。
我试过这样注册护照:
app.requestBeforeRoute = function requestBeforeRoute(server) {
server.use(passport.initialize());
};
passport.use(auth.localApiKeyStrategy());
就像这样:
app.on('middleware:before:errorHandler', function (eventargs) {
passport.use(auth.localApiKeyStrategy());
app.use(passport.initialize());
});
但它不起作用。 另外,我发现了这个:Adding a way to configure a scope to factory function但我还没有真正得到它的工作原理。
非常感谢。
答案 0 :(得分:0)
所以,最后我提出了一个解决方案。在我的情况下,我不需要护照中的会话中间件,因为我正在开发REST API。
首先,config.json中的护照声明:
"passport": {
"enabled": true,
"priority": 10,
"module": {
"name": "passport",
"method": "initialize"
}
}
然后在index.js中,我说护照使用我的策略:
passport.use(auth.localApiKeyStrategy());
最后,在模型的控制器中,我实现了一个自定义回调,因为Passport文档说你可以,我位于auth.js
router.get('/', function(req, res, next) {
auth.authenticate(req, res, next, function() {
// authenticated
// stuff to do when authenticated
});
});
// auth.js
exports.authenticate = function(req, res, next, callback) {
passport.authenticate('localapikey', function(err, device) {
if (err) {
return next(err);
}
if (!device) {
err = new Error();
err.code = statusWell.UNAUTHORIZED;
return next(err);
}
callback();
})(req, res, next);
};
现在我可以使用下一个函数来处理身份验证并将错误传递给我的errorHandler中间件。