4

Node プロジェクトでの認証にPassport Library ( http://passportjs.org/ ) を使用することを検討しています。

次のパスポート セッション機能に混乱しています。

passport.serializeUser(function( user, done ) {
    done( null, user.id );
});

passport.deserializeUser(function( id, done ) {
    user.get( id, function ( err, user ) {
        done( err, user );
    });
});

不思議なんだけど:

1) これらは、認証が必要なすべてのリクエストに対して呼び出されますか? それとも、セッションが最初に作成されたときに一度だけ呼び出されますか?

2) スクリプトの他の部分から「ユーザー」にある情報にアクセスするにはどうすればよいですか?

3) 認証が必要なリクエストの場合、追加のロジックをどこに配置しますか。たとえば、ユーザーのアイドル時間が許容値に達していないかどうかを確認します。

ご協力いただきありがとうございます(事前に)

4

1 に答える 1

3

1)serializeUserユーザーのセッションを作成するとき (認証が成功したとき) に呼び出されます。これは、Express セッションでユーザーに関するある種の識別情報 (一意のユーザー ID など) を格納するために使用されます。

deserializeUserリクエストごとに呼び出され、セッションからその識別情報を取得して、データベースクエリを使用して完全なユーザーレコードに変換する可能性がありますが、それは本当にあなた次第です: ユーザーIDを保存するだけでなく、ユーザー レコード全体をセッションに保存することもできますが、可能であればユーザー レコードの種類と使用しているセッション ストレージによって異なります (たとえば、使用すると、セッションに保存express.cookieSessionできるデータの量が制限されます)。

ユーザー レコード全体を保存すると、次のようになります。

passport.serializeUser(function(user, done) {
  // Here, 'user' is the result of the function called by 'new LocalStrategy()'; when 
  // you call done() below, that result will be stored in the session.
  done(null, user);
});

passport.deserializeUser(function(user, done) {
  // Here, 'user' is what's stored in the session by serializeUser()
  done(null, user);
});

req.user2)ルートまたはミドルウェアで使用できるPassport が入力されます。

3) そのようなチェックを実装するミドルウェアを作成できます。これは良い出発点かもしれません。

于 2013-03-14T18:01:05.307 に答える