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