Tamim Fahed نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 أقوم باستخدام حزمة التوثيق passport.js في خادم node.js، والكود لدي بهذا الشكل: 'use strict'; var express = require('express'); var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var app = express(); module.exports = function setupServer(){ app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret: 'secretKeyHere' })); app.use(passport.initialize()); app.use(passport.session()); passport.use(new LocalStrategy(function(username, password, result) { if (username === 'test' && password === 'test') { console.log('Success'); result(null, {username}); } else { result(null, false); } })); app.post('/login', passport.authenticate('local', { successRedirect: '/loggedIn', failureRedirect: '/guest' })); app.listen(5000); console.log('Server listening on port 5000'); }(); ولكن يظهر لي الخطأ التالي دوماً: Error: failed to serialize user into session كيف يمكنني تجاوز هذا الخطأ؟ 1 اقتباس
0 عبدالباسط ابراهيم نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 من خلال ترجمة الخطأ يبدو أنك نسيت إضافة الدالة serializeUser و deserializeUser كالتالي assport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); كما يظهر في التوثيق الخاص بالمكتبة من هنا اقتباس
1 Salah Eddin Beriani2 نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 لقد نسيت الشيفرة التي تعمل في المنتصف عند المصادقة passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); }); يستخدم Passport وظيفة serializeUser للاحتفاظ ببيانات المستخدم (بعد المصادقة الناجحة) في session. يتم استخدام وظيفة deserializeUser لاسترداد بيانات المستخدم من session. تتحقق كلتا الدالتين serializeUser و deserializeUser من الوسيطة الأولى التي تم تمريرها إليهما ، وإذا كانت من نوع دالة ، فإن serializeUser و deserializeUser لن تفعلا أي شئ ولكن يتم وضع الدالة في كومة من الوظائف والتي سيتم استدعاؤها بعد ذلك . عندما يتم تمرير الوسيطات الأولى ليست من النوع وظيفة يحتاج Passport إلى الإعداد التالي لحفظ بيانات المستخدم بعد المصادقة في session: app.use(express.session({ secret: 'secretKeyHere' })); app.use(passport.initialize()); app.use(passport.session()); لذا فكل الشيفرات مترابطة مع بعضها غياب احدها سيؤدي لفشل كامل اقتباس
0 MoJaffer نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 (معدل) لقد قمت بنسيان اضافة كل من passport.serializeUser & passport.deserializeUser كل ما عليك فعله هو اضافتها passport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); }); تم التعديل في 2 أغسطس 2021 بواسطة MoJaffer اقتباس
السؤال
Tamim Fahed
أقوم باستخدام حزمة التوثيق passport.js في خادم node.js، والكود لدي بهذا الشكل:
'use strict'; var express = require('express'); var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var app = express(); module.exports = function setupServer(){ app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret: 'secretKeyHere' })); app.use(passport.initialize()); app.use(passport.session()); passport.use(new LocalStrategy(function(username, password, result) { if (username === 'test' && password === 'test') { console.log('Success'); result(null, {username}); } else { result(null, false); } })); app.post('/login', passport.authenticate('local', { successRedirect: '/loggedIn', failureRedirect: '/guest' })); app.listen(5000); console.log('Server listening on port 5000'); }();
ولكن يظهر لي الخطأ التالي دوماً:
Error: failed to serialize user into session
كيف يمكنني تجاوز هذا الخطأ؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.