用户注册后登录用户
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('/'); }
作为回叫。此回调的作用是将您重定向到此 '/'
路由。
你问题的第二部分
现在几天,我没有看到任何网站自动登录用户注册后。
希望对您有所帮助。
我正在阅读一篇关于使用 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('/'); }
作为回叫。此回调的作用是将您重定向到此 '/'
路由。
你问题的第二部分
现在几天,我没有看到任何网站自动登录用户注册后。
希望对您有所帮助。