Node.js护照将postdata传递给failureRedirect

时间:2014-10-16 03:58:10

标签: node.js passport.js

这让我抓狂! 我使用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。

1 个答案:

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