web-dev-qa-db-ja.com

passport.jsと複数の認証プロバイダー?

Passport.jsを使用して、同じルートに複数の認証プロバイダーを指定する方法はありますか?

たとえば、(パスポートのガイドから)以下のサンプルルートでローカルおよびFacebookおよびTwitterの戦略を使用できますか。

app.post('/login',
  passport.authenticate('local'), /* how can I add other strategies here? */
  function(req, res) {
    // If this function gets called, authentication was successful.
    // `req.user` contains the authenticated user.
    res.redirect('/users/' + req.user.username);
  });
40
cgiacomi

Passportのミドルウェアは、1つのpassport.authenticate(...)呼び出しで複数の戦略を使用できるように構築されています。

ただし、OR順序で定義されます。これは、どの戦略も成功を返さなかった場合にのみ失敗します。

これはあなたがそれを使用する方法です:

app.post('/login',
  passport.authenticate(['local', 'basic', 'passport-google-oauth']), /* this is how */
     function(req, res) {
       // If this function gets called, authentication was successful.
       // `req.user` contains the authenticated user.
       res.redirect('/users/' + req.user.username);
});

言い換えれば、それを使用する方法は、ユーザーが認証する戦略の名前を含む配列を渡すことです。

また、実装する戦略を事前に設定することを忘れないでください。

この情報は、次のgithubファイルで確認できます。

マルチ認証の例では、基本認証またはダイジェスト認証を使用して認証します

パスポートのauthenticate.js定義

81
Danilo Ramirez