2016-10-16 3 views
1

私は明らかな答えがあると確信していますが、私は公式の文書やインターネット上のどこの解決策も見つけられませんでした。PassportJSでリクエストごとにユーザーを逆シリアル化する必要があるのはなぜですか?

Passport.js私たちは2つのメソッドを定義する必要があります.1つはシリアル化し、もう1つはユーザーセッションをデシリアライズします。 official documentationから

私が読み取る:

のみユーザIDが小さいセッション内に格納されたデータの量を維持しながら、セッションにシリアライズされます。後続の要求を受信すると、このIDは

私の最初の質問はWikipediaによると、用語シリアライズに関するreq.userに復元するユーザーを、見つけるために使用されます。

シリアライズデータ構造やオブジェクトの状態を格納できる形式に変換するプロセスです。

しかし、ユーザーがオブジェクトでありオブジェクトがオブジェクトであるため、Javascriptのみで作成された世界なぜ私たちはシリアライズしていますか?セッション全体でオブジェクト全体を保存することができますが、それを禁止するのは何ですか?

次に、デシリアライズとは、データベースとのやりとりのために、大量のリソースを消費するプロセスです。ですから、どのような要求でも、逆シリアル化を実行するのはなぜですか?私たちはそれを一度だけ行うことはできませんでした。

私はPassportJSについてよく読んでおり、ログインシステムを実装することができますが、私はこれらのあいまいな側面を明確にしたいと思います。 ありがとうございます。

答えて

0

あなたが言うように、セッションに残っているユーザーデータはユーザーIDだけです。ユーザーIDの非直列化をユーザーにキャッシュしたい場合は、それを自分で管理する必要があります(おそらく、データを取得する時間が心配なので、メモリ内に保持する必要があります)。この問題は、ユーザーを更新する操作(おそらくユーザーが電子メールアドレスまたはパスワードを変更する操作)でそのキャッシュを無効/更新する必要があります。そうしないと、古くなったデータがreq.userになる危険性があります。

(Redisのようなメモリストアではなく)データベースを扱っていることを意味しており、すべての要求に対してデータベースからユーザーを取得する際のパフォーマンスの影響を心配しています。あなたの特定の設定についてもっと知らなくても確信することは不可能ですが、あなたの心配は根拠がないと思われます - IDに基づいてユーザーレコードを取得する単一の呼び出し(どのデータベースが最適化されていますか?例えばSQLベースのデータベース)は、要求に大きな遅延を加えてはいけません。

関連する問題