2012-02-15 17 views
19

यदि कोई उपयोगकर्ता पहले से लॉग इन है और एक नए इंस्टेंस में फिर से लॉगिन करने का प्रयास करता है तो मैं इसे अन्य उपयोगकर्ता इंस्टेंस लॉग आउट करना चाहता हूं। मैं नहीं चाहता कि एक ही उपयोगकर्ता मेरे आवेदन पर दो बार लॉग इन हो।एक्सप्रेस/कनेक्ट और सत्र स्टोर का उपयोग करते समय मुझे सत्र आईडी कैसे मिल सकता है?

वर्तमान में सत्र एक रेडिस स्टोर में संग्रहीत है, मैं सत्र भंडारण को संभालने के लिए एक्सप्रेस/कनेक्ट का उपयोग कर रहा हूं।

.destroy(sid, callback) 

हालांकि मैं इससे पहले कि मैं .destroy फोन() कि सत्र id खोजने की जरूरत है: कार्यों उपलब्ध है जो सत्र को नष्ट करने के लिए इस्तेमाल किया जा सकता है में से एक इस प्रकार है। रेडिस में उपयोगकर्ता नाम सत्र के हिस्से के रूप में संग्रहीत किया जाता है।

प्रश्न: क्या उपयोगकर्ता नाम के आधार पर सत्र आईडी प्राप्त करने के लिए रेडिस से पूछना संभव है?

उत्तर

53

req.sessionID आप सत्र के सिड प्रदान करेगा।

+2

यह स्वीकार्य उत्तर क्यों नहीं है? मेरे लिए बहुत अच्छा काम करता है। धन्यवाद! –

0

प्रश्न: क्या उपयोगकर्ता नाम के आधार पर सत्र आईडी प्राप्त करने के लिए रेडिस से पूछना संभव है?

नहीं। रेडिस में सत्र कुंजी का नाम उपयोगकर्ता नाम के नाम पर नहीं रखा गया है।

यहां एक विचार है, हालांकि: जब उपयोगकर्ता में पहले से लॉग इन किया गया है, तो फिर से लॉग इन करने का प्रयास करता है, क्या आप इसे अपने आवेदन में नहीं देख सकते हैं, या तो पुराने सत्र को तुरंत नष्ट कर सकते हैं, या फिर उन्हें फिर से लॉगिन करने की अनुमति नहीं दे सकते?

15

खाता के साथ एसआईडी स्टोर करें, जब उपयोगकर्ता उपयोगकर्ता खाता कॉल के डेटाबेस सत्यापन के दौरान लॉग इन करता है .destroy (sid, fn), फिर उपयोगकर्ता के मौजूदा एसआईडी के साथ डेटाबेस में एसआईडी अद्यतन करें।

मेरे मामले में MongoDB का उपयोग कर इस मैं यह कैसे किया गया है:

app.post('/login', function(req, res) 
{ 
    var sid = req.sessionID; 
    var username = req.body.user; 
    var password = req.body.pass; 

    users.findOne({username : username, password : password}, function(err, result) 
    { 
    ... 
    sessionStore.destroy(result.session, function(){ 
     ... 
     users.update({_id: result._id}, {$set:{"session" : sid}}); 
     ... 
    } 
    ... 
    } 
} 
12

हाल के पाठकों के लिए;

कनेक्ट middlewares संस्करण 4.

के बाद एक्सप्रेस में शामिल नहीं हैं तो आदेश req.sessionID काम के बाद आपको बस इतना करना होगा करने के लिए:

  1. सुनिश्चित करें कि आपके package.json अंदर cookie-parser अब्द express-session मॉड्यूल है । यह न जोड़ लिया है, उन्हें जोड़ें:
npm install express-session --save 
npm install cookie-parser --save 
  1. करते हुए उन्हें अपने app.js फ़ाइल में की आवश्यकता होती है और आवश्यक कॉन्फ़िगरेशन पैरामीटर जोड़ आदेश के बारे में सावधान रहें।
var cookieParser = require('cookie-parser'); 
var session = require('express-session') 
app.use(cookieParser()); 
app.use(session({ 
    secret: '34SDgsdgspxxxxxxxdfsG', // just a long random string 
    resave: false, 
    saveUninitialized: true 
})); 
  1. अब आप req.sessionID और req.session.id का उपयोग करना चाहिए।
+2

एक्सप्रेस-सत्र के लिए कुकी-पार्सर को 1.5.0 पर वापस कर दिया गया था (https://github.com/expressjs/session पर रीडेम देखें)। वास्तव में, कुकी-पार्सर अब साइड इफेक्ट्स का कारण बन सकता है। – YiddishNinja

संबंधित मुद्दे