我有一个Passport js本地注册策略,它使用了successRedirect和failureRedirect方法。问题是,如果注册过程出错,Passport将只是重定向回注册表单,表单中没有数据。
removeFirst
我的本地注册策略中存在以下条件:如果提供的两个密码不匹配,将向用户发送失败消息。
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
}));
除了flash消息,我还想将数据发送回/ signup路由,并使用用户提供的数据重新填充表单。
有没有办法在失败时将表单数据发送回浏览器?
答案 0 :(得分:2)
答案比我想象的要简单得多。
验证应该在将数据发送到Passport js之前进行,然后如果数据无效,则可以重新呈现/ signup模板并传回数据。
解决方案就是这个问题:NodeJS express-validator with passport
答案 1 :(得分:0)
对不起,在我们的评论之后,我了解你现在要求的更好一点。您需要在护照代码中使用自定义回调。护照网站提供了这个例子:
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);
});
通过此处的闭包,您的回调可以访问请求和响应,因此当您处理错误状态时,您可以调用代码来更新来自原始请求的响应(例如,拉入指定的用户名或其他您希望重新填充注册屏幕。)