繁体   English   中英

Node.js护照将postdata传递给failureRedirect

[英]Node.js passport pass postdata on to failureRedirect

这真让我抓狂! 我正在使用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的视图。

您是否向应用程序添加了连接闪存中间件?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM