Node.js Express + Passport + Cookie Sessions n > 1 servers -


पासपोर्ट डॉक्स से:

एक विशिष्ट वेब अनुप्रयोग में, प्रमाणीकरण के लिए प्रयुक्त क्रेडेंशियल्स एक उपयोगकर्ता केवल लॉगिन अनुरोध के दौरान प्रेषित किया जाएगा। यदि प्रमाणीकरण सफल होता है, तो उपयोगकर्ता के ब्राउज़र में एक कुकी सेट के माध्यम से एक सत्र की स्थापना और रखी जाएगी।

प्रत्येक अनुरोध के बाद क्रेडेंशियल नहीं होंगे, बल्कि सत्र की पहचान करने वाली अनूठी कुकी लॉगिन सत्रों का समर्थन करने के लिए, पासपोर्ट सत्र के लिए और उपयोगकर्ता के संस्करणों को सीरियलाइज़ करेगा और deserialize करेगा।

इसलिए, यह प्रमाणन क्लाइंट के ब्राउज़र में बनाए रखा जा रहा है, मुझे स्केल करने में सक्षम होना चाहिए वेब सर्वर & gt; 1 (प्रत्येक सर्वर एक ही डेटाबेस का उपयोग करता है) और पासपोर्ट को उपयोगकर्ता को कुकी में संग्रहीत किसी आईडी से डिसेरीलाइज़ करना है, भले ही सर्वर ने पहले उपयोगकर्ता को देखा हो। अगर सर्वर है पहले उपयोगकर्ता को देखा लेकिन कोई कुकी मौजूद नहीं है, तो मैं उम्मीद करता हूं कि पासपोर्ट प्रमाणीकरण विफल करने के लिए ... लेकिन मैं यहां तक ​​कि n & gt; 1 सर्वर

1 सर्वर प्रक्रिया के साथ, पासपोर्ट ठीक काम करता है:

सर्वर दोनों सर्वर पर अधिक या कम डॉस के वर्बैटिम हैं (अधिक परीक्षण के बाद w / कनेक्ट संदर्भ और जैसे):

  एप। कॉन्फ़िगर (फ़ंक्शन () (ऐप.उसे (एक्सप्रेस.स्टीटिक ('सार्वजनिक')); एप। यूज (एक्सपैरकुकी पार्सर ()); ऐप। (Express.bodyParser ()); एप.उसे (एक्सप्रेस सेशन ({गुप्त: 'कीबोर्ड बिल्ली'}); एप। यूज (पासपोर्टइनरीइज ()); एप। यूज (पासपोर्ट सशन ()); ऐप .use (app.router);});   

जब उपयोगकर्ता लॉगिन सफल होता है, तो मैं HTTP अनुरोध वापस करने से पहले, मैं req.user और req.session को लॉग करता हूं: <पूर्व> console.log (req.user); console.log (req.session); Res.send (200, req.user); // "" "//", "" "//", "" // "," "" "" "" "" : {"उपयोगकर्ता": "आईडी"}}

जब HTTP अनुरोध लौटाता है, तो वेब एप को / अनुरोध करता है और सर्वर (एस) को < कोड> रिक। यूज़र आईडी से आईडी पारित कुकी से:

  passport.deserializeUser (फ़ंक्शन (req, user_id, cb) {console.info ('पासपोर्ट deserializing उपयोगकर्ता:' .concat (user_id)); console.log (req.user); console.log (req.session); // ... // सीबी (नल, उपयोगकर्ता);});   

1 सर्वर के साथ चल रहा है, यह लॉग के रूप में:

  पासपोर्ट deserializing उपयोगकर्ता: आईडी अनिर्धारित   

तत्काल बाद कॉलबैक cb (null, user) और अनुरोध वापस करने से पहले, मैं req.user और req.session को लॉग करता हूं और देखो कि मैं क्या करता हूं उम्मीद है!

अब, n & gt; 1 सर्वर चल रहा है , मान लें कि 2, अगर वेब एपी अनुरोध / सर्वर 2 से करता है और उसे req.user आईडी आईडी < / कोड> पास की गई कुकी से (मूल रूप से सर्वर 1 में लॉग इन करके सेट किया गया), मुझे डिस्रिअललाइज़ फ़ंक्शन भी नहीं देखा जाता है! जब मैंने HTTP मार्ग की शुरुआत में प्रवेश किया था (मिडलवेयर के बाद):

  console.log (req.user); console.log (req.session);   

मैं देख रहा हूँ:

  अपरिभाषित // {"कुकी": {// "originalMaxAge": null, // "समाप्त हो गई": नल, / / "HttpOnly": सच है, // "पथ": "/" //}, // "पासपोर्ट": {}}   

... जो मुझे कुछ कहता है कुकी, लेकिन क्या? दोनों सर्वर प्रक्रियाएं उसी DNS के पीछे हेरोका पर हैं मैंने इसके लिए कुछ "साझा किए गए सत्र" स्टोर की आवश्यकता के बारे में विभिन्न विसंगतियां पढ़ ली हैं ... लेकिन यह ग्राहक की ब्राउज़र स्तर पर एक कुकी है। कृपया सहायता कीजिए! एक्सप्रेस नवीनतम 3.X और पासपोर्ट 2.1 है।

कुकी में सत्र डेटा शामिल नहीं है, यह केवल सत्र आईडी है इस आईडी का प्रयोग करके आपका एक्स्प्रेस एप्लिकेशन इसके सत्र स्टोर से संबंधित सत्र डेटा प्राप्त करेगा। और जब से आप app.use (express.session ({secret: 'keyboard cat'}) को कॉल करते समय किसी स्टोर को परिभाषित नहीं कर रहे हैं; आप अंतर्निर्मित मेमरी स्टोर का उपयोग कर रहे हैं जिसे बीच में साझा नहीं किया गया है प्रक्रियाओं।

इसलिए, किसी सत्र सत्र को स्थापित करें जो डेटाबेस का उपयोग करता है, जैसे। मोंगोडीबी के लिए।

Comments

Popular posts from this blog

java - ImportError: No module named py4j.java_gateway -

python - Receiving "KeyError" after decoding json result from url -

.net - Creating a new Queue Manager and Queue in Websphere MQ (using C#) -