2012-10-18 25 views
12

में सत्रों को कैसे स्टोर करें मैंने इस विषय को Node.js + express.js + passport.js : stay authenticated between server restart पढ़ा है और मुझे बिल्कुल वही चीज़ चाहिए, लेकिन रेडिस के लिए। मैंने इस तरह का कोड इस्तेमाल किया:नोडजेस + पासपोर्ट.जेएस + रेडिस: रेडिस

var RedisStore = require('connect-redis')(express); 
app.use(express.session({ 
    secret: "my secret", 
    store: new RedisStore, 
     cookie: { secure: true, maxAge:86400000 } 
})); 

और यह काम नहीं करता है। रेडिस कनेक्ट करने के लिए मैं कनेक्ट-रेडिस मॉड्यूल का उपयोग करता हूं। मैं क्या गलत कर रहा हूँ? धन्यवाद!

UPD: मुझे कोई त्रुटि नहीं मिलती है। सफलतापूर्वक प्रक्रियाओं को सुनिश्चित करने के लिए, मैंने लॉग-लाइन जोड़ा, और यह निष्पादित करता है। express.logger साथ

function(email, password, done) { 
    // asynchronous verification, for effect... 
    process.nextTick(function() { 
     findByEmail(email, function(err, user) { 
      if (!user) { 
       return done(null, false, { 
        message: 'Unknown user ' + email 
       }); 
      } 
      if (user.password != password) { 
       return done(null, false, { 
        message: 'Invalid password' 
       }); 
      } 
      //just logging that eveything seems fine 
      console.log("STATUS: User " + email + " authentificated succesfully"); 
      return done(null, user); 
     }) 
    }); 
})); 

प्रवेश करें() सक्षम था:

127.0.0.1 - - [Fri, 19 Oct 2012 05:49:09 GMT] "GET /ico/favicon.ico HTTP/1.1" 404 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4" 
STATUS: User admin authentificated succesfully 

मुझे लगता है प्रमाणन/उपयोगकर्ताओं/साख/serializing/खुद deserializing के साथ कुछ भी गलत नहीं है कि ऐसा । समस्या यह है कि पासपोर्ट कुकी को रेडिस में सेट नहीं कर सकता है और इसे पढ़ सकता है।

+0

क्या काम नहीं करता है? आप क्या त्रुटि प्राप्त कर रहे हैं? – Max

+0

मैंने अपनी पोस्ट अपडेट की। – f1nn

+0

"पासपोर्ट कुकी को रेडी में सेट नहीं कर सकता है और इसे पढ़ सकता है।" यह समझ में नहीं आता है। – Ben

उत्तर

5

का उपयोग करना चाहिए

cookie: { secure: false, maxAge:86400000 } 
+2

'सुरक्षित: झूठा' सेट करना मतलब है कि आपकी सत्र कुकीज़ एसएसएल के बिना भेजी जा सकती है, जिससे आप सत्र अपहरण के लिए कमजोर हो जाते हैं। http://en.wikipedia.org/wiki/Session_hijacking – Alan

+2

सत्र के बजाय कुकीज़ का उपयोग करने का कोई अच्छा विचार नहीं है। –

+0

आप इसे विकास के लिए कर सकते हैं लेकिन सुनिश्चित करें कि आप उत्पादन में सत्य के लिए सुरक्षित सेट करें। आप पर्यावरण परिवेश का उपयोग करके आसानी से कर सकते हैं। – Porlune

0

जब आप स्पष्ट रूप से दुकान सेट क्या होता है? यानी आपके ऐप में इन पंक्तियों के साथ कुछ:

var redis = require('redis'); 
// This is host and port-dependent, obviously 
var redisClient= redis.createClient(6379, 'localhost'); 

app.use(express.session({ 
    secret: 'your secret', 
    /* set up your cookie how you want */ 
    cookie: { maxAge: ... }, 
    store: new (require('express-sessions'))({ 
     storage: 'redis', 
     instance: redisClient 
    }) 
}));