这让我抓狂! 我使用Express 4,护照和本地护照来验证登录和注册。
我使用这个例子: 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作为视图btw。
答案 0 :(得分:1)
您是否在应用中添加了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);
})
});
}
));