2016-09-28 6 views
1

私はここで起こって何を参照してください。この例にPassportカスタムコールバックはどのように機能しますか?

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); 
}); 

を理解していない、それは背後に置かれている機能(REQ、RESへの参照ではありませんので、

app.get('path', function(req, res, next) {/*bunch of code*/})(req, res, next) 

どのようにこの仕事ができることです、 次) ?

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    })(req, res, next); 
}); 

ので:

答えて

2

あなたの簡略化した例では、私は、カスタムコールバックに「公式」パスポートの例を減らす場合は、私が得るおそらくミスマッチブラケットと、このような...

に、少しオフです私の最初の仮定は、passport.authenticateから返されたエクスプレスミドルウェア準拠の関数に(req, res, next)が渡されているということです。

私はそれがちょうど始まる何が起こっているのかだように見えます(これを書いている時点では)ので、ライン81を中心に、the authenticate code on GitHub周り突くかに行く場合:

return function authenticate(req, res, next) { 
    /* lots and lots of lines follow */ 
} 
+0

おかげで非常に! – Lev

+0

しかし、公式のカスタムコールバックの例は、カスタムコールバックが使用されたときに 'req.login'を手動で呼び出さなければならないという点を指摘しています。なぜ私はそれが本当の理由であるかについてまだ明確ではありません。なぜなら、私が 'req.logIn'関数内のコードを実行しなくてもテストを実行するからです。私はカスタムコールバックでローカル戦略を使用する実例を持つ定型文を見たいと思っています。 – nextgentech

関連する問題