使用Passport js failureRedirect方法发回数据

我有一个Passport js本地注册策略,它使用了successRedirect和failureRedirect方法。 问题是,如果注册过程出现错误,Passport将简单地redirect回registry单,表单中没有数据。

app.post('/signup', passport.authenticate('local-signup', { successRedirect: '/signup/avatar', // redirect to the secure profile section failureRedirect: '/signup', // redirect back to the signup page if there is an error failureFlash: true // allow flash messages })); 

我有我的本地注册策略中的以下条件,如果两个提供的密码不匹配,将向用户发送失败消息。

 if(req.body.password != req.body.confirm_password){ console.log('Passwords do not match'); return done(null, false, req.flash('signupMessage', 'Your passwords do not match')); } 

随着Flash消息,我想发送数据回到/注册路线,并重新填充用户提供的数据的forms。

有没有办法发送表单数据返回到浏览器失败?

答案比我想象的要简单得多。

在数据发送到Passport js之前应该进行validation,如果数据无效,则可以重新呈现/注册模板并将数据传回。

解决方法是在这个问题上: NodeJS带有护照的快速validation器

对不起,我们的意见后,我明白你现在要问好一点。 您需要在护照代码中使用自定义回叫。 护照网站给出了这个例子:

 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); }); 

通过这里的闭包,你的callback可以访问请求和响应,所以当你处理你的错误状态时,你可以调用代码来更新来自请求的响应(例如,拉入指定的用户名或者你是什么希望重新填充注册屏幕)。

http://passportjs.org/docs/authenticate