新用户注册后立即进行Passport身份验证

sur*_*rth 15 authentication node.js express passport.js

我正在尝试在/register表单上提交POST后立即进行身份验证并登录用户.理想情况下,我希望用户能够注册,然后立即重定向到仪表板,而无需再次输入凭据.

我的服务器使用Passport 0.1.17,本地策略配置为使用电子邮件地址和密码登录.目前的代码是:

app.post('/register', function(req, res) {

  // attach POST to new User variable
  var registerUser = new User({ email: req.body.email, password: req.body.password, name: req.body.name });

  // save registerUser Mongo
  registerUser.save(function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log('registerUser: ' + registerUser.email + " saved.");
    }
  });

  // here is where I am trying to authenticate and then redirect
  passport.authenticate('local', { failureRedirect: '/login', failureFlash: true }),
  res.redirect('/dashboard');
  });
Run Code Online (Sandbox Code Playgroud)

我如何重构此代码以保存新用户,然后进行身份验证并最终重定向到仪表板?

提前致谢!

sur*_*rth 24

这是我在阅读req.login后想出的解决方案:

app.post('/register', function(req, res) {
  // attach POST to user schema
  var user = new User({ email: req.body.email, password: req.body.password, name: req.body.name });
  // save in Mongo
  user.save(function(err) {
    if(err) {
      console.log(err);
    } else {
      console.log('user: ' + user.email + " saved.");
      req.login(user, function(err) {
        if (err) {
          console.log(err);
        }
        return res.redirect('/dashboard');
      });
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

我想稍微清理它,并认为错误的部分可能更强大,但这是一个有效的解决方案.请注意,如果其他人实现了这一点,他们应该知道它是针对使用带有电子邮件而不是用户名的本地护照策略而定制的.

  • 来自新手的查询:这是否意味着您将用户的密码以纯文本形式存储在数据库中?因此,如果有人获取了您的数据库,他们可以读取您用户的密码吗? (3认同)
  • @Paul D. White:我知道这已经过时了,但为了未来读者的利益回答你的问题,通常在User模型类本身内处理加密,这种方式对应用程序的其余部分是透明的(这有利于使其不可避免). (2认同)