23

我正在尝试在/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');
  });

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

提前致谢!

4

2 回答 2

29

这是我在阅读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');
      });
    }
  });
});

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

于 2013-07-31T14:33:11.310 回答
0

我认为您正在寻找register 方法,它将注册(并隐藏密码)

https://www.npmjs.com/package/passport-local-mongoose(搜索注册方法)。

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

  // New user variable created.
  // Note: Password is not part of the new User variable; you don't want to simply store sensitive information in the database.
  var registerUser = new User({ email: req.body.email, name: req.body.name });

  // Register new user. Note the 2nd variable (password). If registration's successful (no errors), redirect.
  registerUser.register(registerUser, req.body.password, function (err, newUser){
      if(!err){
           passport.authenticate('local', req, res, function(){
                   res.redirect('/dashboard');                     
           });
       }
  });
});
于 2019-03-25T22:44:47.213 回答