Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Apakah saya mengimplementasikan serialisasi dan deserialize NodesJS + Passport + RedisStore?

Jika Anda menggunakan sesi Anda harus menyediakan paspor dengan fungsi serialisasi dan deserialisasi. Menerapkan Redis sebagai penyimpanan sesi tidak ada hubungannya dengan bagaimana paspor diterapkan, ini hanya berkaitan dengan tempat data sesi disimpan.

Menerapkan Sesi dengan paspor

Seperti yang saya katakan, fungsi serialisasi dan deserialisasi harus disediakan untuk paspor agar sesi dapat berfungsi.

Tujuan dari berseri fungsinya adalah untuk mengembalikan informasi pengenal yang memadai untuk memulihkan akun pengguna pada permintaan berikutnya. Khususnya parameter kedua dari done() metode adalah informasi yang diserialkan ke dalam data sesi .

deserialisasi fungsi yang Anda berikan dimaksudkan untuk mengembalikan profil pengguna berdasarkan informasi pengenal yang diserialkan ke sesi .

Berikut adalah contoh dari Panduan Paspor di bagian yang membahas sesi:

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

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

Pada contoh di atas passport.serializeUser() disediakan fungsi yang mengambil dua parameter, profil pengguna (user ) dan fungsi panggilan balik (done ). Fungsi panggilan balik mengambil sebagai parameter kedua, informasi pengenal (user.id , tetapi jika Anda menggunakan mongoDB ini mungkin user._id ) diperlukan untuk memulihkan akun dari database. Ini akan dipanggil pada setiap permintaan yang diautentikasi dan menyimpan informasi pengenal dalam data sesi (apakah itu dalam cookie atau penyimpanan Redis Anda).

passport.deserializeUser() disediakan fungsi yang juga mengambil dua parameter, informasi pengenal (id ) dan sekali lagi fungsi panggilan balik (done ). Informasi pengenal adalah apa yang diserialkan ke data sesi dalam permintaan sebelumnya (user.id ). Fungsi panggilan balik di sini memerlukan profil pengguna sebagai parameter kedua, atau kesalahan apa pun yang muncul dalam mengambil profil sebagai parameter pertama. User.findById() fungsi adalah fungsi pencarian untuk profil pengguna dalam database. Dalam contoh ini User objek adalah turunan dari model luwak yang memiliki findById() fungsi.

Fungsi yang disediakan untuk passport.deserializeUser() dipanggil oleh middleware paspor, passport.session() sebelum penanganan rute untuk menyimpan profil pengguna (user ) ke req.user .

Menerapkan Redis sebagai Penyimpanan Sesi

Tujuan menggunakan Redis adalah untuk menyimpan data sesi sisi server sehingga satu-satunya data yang disimpan sisi klien adalah id sesi. Sekali lagi, ini tidak tergantung pada bagaimana Anda menerapkan paspor, paspor tidak peduli di mana data sesi disimpan selama Anda telah menambahkan dukungan sesi ke aplikasi Anda. Pertanyaan sebelumnya tentang stackoverflow ini membahas cara mengimplementasikan Redis



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. berbagi objek IO dalam beberapa instance node

  2. mengeksekusi perintah redis eval untuk menjalankan skrip Lua di nodeJS

  3. Spring RedisConnectionFactory dengan transaksi tidak mengembalikan koneksi ke Pool dan kemudian memblokir saat habis

  4. Penerusan port dengan nginx dari java

  5. Bagaimana cara menggunakan cluster Node.js dengan aplikasi Express sederhana saya?