Javascript 理解Passportjs自定义回调
我正在试验Passportjs,自定义回调的代码是:Javascript 理解Passportjs自定义回调,javascript,passport.js,Javascript,Passport.js,我正在试验Passportjs,自定义回调的代码是: app.get('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/login'); } req.logIn(user, function(err
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
我对所有这些代码都很满意,除了倒数第二行(req,res,next)代码>-有人能解释一下为什么在末尾添加这些参数吗。这可能更像是一个JS问题,而不是Passport问题,但我们非常感谢您的帮助。javascript的答案是,它返回一个函数,然后使用第二组参数再次调用该函数
该功能是“链中每个策略的故障累加器”
您可以在不使用匿名函数或自定义回调的情况下重写它。只需使用passport的passport。使用(new LocalStrategy())
函数创建新策略
您只需将logIn
函数移到此文件中,而不是将方法移到req
。然后,您可以简单地调用passport.authenticate
,如下所示:
app.get('/login', passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
因此,您不必在回调中使用res.redirect,只需使用passport内置的successRedirect
和failureRedirect
属性即可。您也可以在上看到他们的文档。Connect/Express middleware函数具有签名:
function(req, res, next)
passport.authenticate()
可用作中间件,例如:
app.post('/login', passport.authenticate('local'), nextMiddleware);
这意味着
authenticate()
返回一个中间件函数对象,您可以使用(req,res,next)
参数调用该对象以继续应用程序的请求-响应周期。这也是一个通行证问题。显然,passport.authenticate(…)
确实返回了一个函数。看起来它被设计成写为app.get('/login',passport.authenticate('local',函数(err,user,info){…})代码>在您的示例中,似乎缺少(req、res、next)。如果没有res.redirect(),如何调用它们?我真的很喜欢你的回答,因为我有一个常用的回调函数。@Chris更新了答案以便更好地工作。您可能不应该使用回调,而是应该使用实际的身份验证函数来完成所有工作。这对你有用吗?谢谢你的调整,但这正是我想要摆脱的我正在使用它进行API身份验证,我不想重定向。我正在使用它用正确的响应代码自定义我的API响应,并用我的响应传递消息。@Chris这是用来为经过身份验证和未经身份验证的路由发送不同数据的吗?有一种passport身份验证策略:
app.post('/login', passport.authenticate('local'), nextMiddleware);