1. ホーム
  2. node.js

[解決済み] パスポートの理解 シリアライズ デシリアライズ

2022-03-21 10:48:45

質問

Passportのserializeとdeserializeメソッドのワークフローを素人にどう説明するのか。

  1. はどこにあるのでしょうか? user.id の後に passport.serializeUser が呼び出されましたか?

  2. を呼び出しています。 passport.deserializeUser の直後で、ワークフローのどこに位置するのでしょうか?

    // used to serialize the user for the session
    passport.serializeUser(function(user, done) {
        done(null, user.id); 
       // where is this user.id going? Are we supposed to access this anywhere?
    });
    
    // used to deserialize the user
    passport.deserializeUser(function(id, done) {
        User.findById(id, function(err, user) {
            done(err, user);
        });
    });
    
    

まだ、頭の中が整理できていません。私は完全に動作するアプリを持っており、いかなる種類のエラーにも遭遇していません。

ここで何が起こっているのか、正確に理解したいのです。

どんなことでもご相談ください。

解決方法は?

<ブロッククオート
  1. どこが user.id の後に passport.serializeUser が呼び出されたのですか?

の第2引数で指定した)ユーザーIDを入力します。 done 関数) はセッションに保存され、後でそのオブジェクト全体を deserializeUser 関数を使用します。

serializeUser は、ユーザーオブジェクトのどのデータをセッションに保存すべきかを決定します。serializeUserメソッドの結果は、セッションに req.session.passport.user = {} . 例えば、次のようになります(キーとしてユーザーIDを提供しているため)。 req.session.passport.user = {id: 'xyz'}

  1. を呼び出しています。 passport.deserializeUser の直後で、ワークフローのどこに位置するのでしょうか?

の第一引数は deserializeUser に渡されたユーザーオブジェクトのキーに対応します。 done 関数(1.を参照)を使用します。つまり、あなたのオブジェクト全体は、そのキーの助けを借りて取得されるのです。ここでいうキーとは、ユーザーIDのことです(キーは、ユーザーオブジェクトの任意のキー、つまり、名前、メールなどでもかまいません)。 では deserializeUser このキーは、メモリ上の配列やデータベース、その他のデータリソースとマッチングされます。

取り出されたオブジェクトは、リクエストオブジェクトに req.user

ビジュアルフロー

passport.serializeUser(function(user, done) {
    done(null, user.id);
});              │
                 │ 
                 │
                 └─────────────────┬──→ saved to session
                                   │    req.session.passport.user = {id: '..'}
                                   │
                                   ↓           
passport.deserializeUser(function(id, done) {
                   ┌───────────────┘
                   │
                   ↓ 
    User.findById(id, function(err, user) {
        done(err, user);
    });            └──────────────→ user object attaches to the request as req.user   
});