用户注册后登录用户

Logging user in after user have registered

我正在阅读一篇关于使用 passport-local-mongoose 进行身份验证的文章。 Article

在这篇文章中,我发现这行代码确实注册了用户并让他们登录

app.post('/register', function(req, res) {
    Account.register(new Account({ username : req.body.username }), req.body.password, function(err, account) {
        if (err) {
            return res.render('register', { account : account });
        }

        passport.authenticate('local')(req, res, function () {
          res.redirect('/');
        });
    });
  });

让我困惑的是这个

passport.authenticate('local')(req, res, function () {
   res.redirect('/');
});

首先,我不明白passport.authenticate()后面的部分。它看起来不像回调或 IIFE。 其次,据我所知,passport.authenticate() 是一个中间件(如果我错了请见谅)。我们应该像那样使用它吗?

我对此最好的解释是因为在文章中已经定义了上面

passport.use(new LocalStrategy(Account.authenticate()))

因此,passport.authenticate() 现在将调用 Account.authenticate()。奇怪的是,authenticate() 需要密码,我们没有提供。也许它 return 是一个 Promise,但我上面说的那部分看起来不像是 Promise。

那么那部分是什么,让用户实际登录是一个好习惯吗?

让我们先谈谈那个奇怪的部分:

TLDR: 正如第一位评论者提到的 passport.authenticate return 函数.

我们如何调用函数?像这样:functionName(param1, param2, callbackMaybe); .你觉得没问题吧?

现在,看看下面的代码

function a() {
  return function b() {
    console.log("Hi there!");
  }
}

函数 a return 函数 b。您将如何在控制台中使用 Hi there!?你必须这样做 a()()。 你可以这样选择:

let b = a(); // Since, a returns a function so, b is now a function.
b();

这里也一样,passport.authenticate('local') return 调用一个带有 3 个参数的函数,其中最后一个是回调函数。就表达式而言,第三个参数是 next() 函数。我相信你知道 next() 函数的用法。您正在发送 function () { res.redirect('/'); } 作为回叫。此回调的作用是将您重定向到此 '/' 路由。

你问题的第二部分

现在几天,我没有看到任何网站自动登录用户注册后。

希望对您有所帮助。