6

done()メソッド (またはsuccess()、私のデバッガーによって伝えられたように) には、 と呼ばれる 3 番目の引数もあることがわかりましたinfo。渡された値がどうなるか教えてもらえますか?

編集

私が参照しているdone()メソッドは、ストラテジー コールバックで呼び出さなければならないメソッドです。例えば

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));

スニペットはここからです。ご覧のとおり、場合によっては、 amessageが の 3 番目の引数としてオブジェクトに渡されますdone()messageルート メソッドでこれにアクセスするにはどうすればよいでしょうか。

4

2 に答える 2

8

として 3 番目のパラメーターとして渡された情報にアクセスできる必要がありますreq.authInfo

ここでは、フラッシュ メッセージにinfo割り当てられて使用される処理を として見ることができます。authInfo

于 2013-02-04T02:54:06.217 に答える
5

infoは、検証機能中に決定された可能性のある役割、ユーザープロファイル、承認などの追加のユーザー情報を含めることができるオプションの引数です。これは、ユーザーが正常に認証されると、認証されたユーザーに関するこれらの詳細を渡すことができるため、サードパーティの認証戦略に役立ちます。そうしないと、後でもう一度検索する必要があり、非効率的です。

そして、loganfsmythが指摘したように、ミドルウェアまたはルートが後でアクセスできるようににinfo設定されています。req.authInfo

さらに、次のように、transformAuthInfoを登録することにより、情報オブジェクトをさらに変換できます。

passport.transformAuthInfo(function(info, done) {
  Client.findById(info.clientID, function (err, client) {
    info.client = client;
    done(err, info);
  });
});

LocalStrategyの場合、検証済みの関数で、失敗アクションと成功アクションの両方に情報が渡されることがわかります。

typeしたがって、さらに、プロパティを指定できます。messageこれらは、ユーザーに表示されるフラッシュステータス情報メッセージで使用されます。(typeデフォルトでは、ユーザーが認証されている場合は「成功」、それ以外の場合は「エラー」になります)。

フラッシュメッセージは、request.flash()関数を介してExpress2.xで機能します。これはExpress3.xで削除されました。この機能が必要な場合は、connect-flashミドルウェアをお勧めします。

于 2013-02-04T06:17:29.120 に答える