这让我发疯! 我使用 Express 4、 Passport 和本地 Passport 来验证登录和注册。
我正在使用这个例子: https://github.com/tutsplus/passport-mongo
问题: 当注册表单未验证(假设您忘记了其中一个字段)并且我们重定向到 failureRedirect(这是同一注册页面)时,所有输入的值都会消失。由于弄乱了一个字段而必须填写整个表单,这不是很好的用户体验。
如何传递表单上已输入的数据?
我得到了这两条路由来处理表单的 GET 和 POST:
app.get('/signup', function(req, res){
res.render('signup', {
message: req.flash('message'),
});
});
app.post('/signup', passport.authenticate('signup', {
successRedirect: '/signup-complete',
failureRedirect: '/signup', // need to pass the entered values (if any) back to the signup page
failureFlash : true
}));
我一直怀疑这些值已经存在 - 我只是不知道如何获取它们。
顺便说一句,我正在使用 Swig 来获取 View 。
最佳答案
您添加了connect-flash吗?您的应用程序的中间件?
var flash = require('connect-flash');
app.use(flash());
更新:
当你定义本地策略时,你应该在done函数的第三个参数中返回flash消息。示例:
passport.use(new LocalStrategy(
function(username, password, done) {
findByUsername(username, function(err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false, { message: 'Unknown user ' + username }); }
if (user.password != password) { return done(null, false, { message: 'Invalid password' }); }
return done(null, user);
})
});
}
));
关于Node.js Passport 将 postdata 传递给 failureRedirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26396004/