Node.js Passport 将 postdata 传递给 failureRedirect

标签 node.js passport.js

这让我发疯! 我使用 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/

相关文章:

html - 删除区分大小写的 Node 子文件夹

mysql - 在 NodeJS 中生成交互式进程并退出

javascript - 带有 ssl 和静态文件服务的 node.js

node.js - Node : "req.session.save is not a function" error during authentication

node.js - 如何使用 pm2 观看和重新加载 ExpressJS 应用程序

javascript - Node.js 中的 Google map 几何库

node.js - 为什么在使用 oauth 访问 token 进行身份验证的同时尝试发布到 github API 时会收到 404 响应?

Java Socket.io 客户端与 socket.io Passport 服务器身份验证

Node.js Express Passport Cookie 过期

node.js - session 未在 Express 中创建