2012-11-30 6 views
7

मैं एक बुनियादी व्यवस्थापक प्रमाणन सेट कर रहा हूं, जब उपयोगकर्ता के प्रवेश, मैं authcallback में इस फ़ंक्शन को कॉल करें:NodeJS एक्सप्रेस req.session भंडारण नहीं मेरी चर

function checkAdmin (req) { 
    Admin.findOne({ user : req.user.id },function (err, admin, count){ 
    req.session.isAdmin = true; 
    console.log("session : %j",req.session); 
    }) 
} 

और फिर मैं कर

res.redirect('/') 

सूचकांक नियंत्रक के अंदर कोड:

console.log("session : %j",req.session); 
    res.render('index', { title: 'Accueil',message: req.flash('info') }); 

और यही मैं कंसोल में मिलता है:

session : {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path" 
:"/"},"passport":{"user":"5079832df1e9a6485e000001"},"flash":{},"isAdmin":true} 

session : {"cookie":{"originalMaxAge":null,"expires":null,"httpOnly":true,"path" 
:"/"},"passport":{"user":"5079832df1e9a6485e000001"},"flash":{}} 

मुझे नहीं पता कि सत्र isAdmin मान क्यों संग्रहीत नहीं करता है।

मैं कह रही है कि app.use (app.router) जगह एक कारण हो सकता है कुछ अन्य प्रश्न पढ़ा है लेकिन मुझे क्या करना:

app.use(cookieParser) 
app.use(express.session({store: session_store })); 
app.use(passport.initialize()) 
app.use(passport.session()) 


// routes should be at the last 
app.use(app.router) 

यह एक तरह से बेवकूफ होना चाहिए मुझे लगता है ..

+0

हो सकता है कि कुछ इस तरह मदद कर सकते हैं पुनर्जीवित करने के लिए: req.session.regenerate https : //github.com/senchalabs/connect/issues/681 – alditis

+1

तो इसका मतलब यह होगा कि हर बार जब मैं सत्र में एक चर बदलना/जोड़ना चाहता हूं, तो मुझे req.session.regenerate का उपयोग करना होगा? –

+1

शायद आपको चेकएडमिन फ़ंक्शन के अंदर रीडायरेक्ट करना चाहिए। –

उत्तर

7

खैर,

अंत में मैंने पाया कि यह क्यों काम नहीं कर रहा था। मैंने my Admin.findOne फ़ंक्शन के बाहर res.redirect किया था। इसलिए सत्र चर सेट होने से पहले ग्राहक को रीडायरेक्ट किया गया था।

यह authCallbackFunction काम कर रहा है:

exports.authCallback = function (req, res, next) { 
    //Check if the logged in user is an admin 
    Admin.findOne({ user : req.user.id },function (err, admin, count){ 
    var old = req.session; 
     if(!err && admin) 
     req.session.isAdmin = true; 
     res.redirect('/') 
    }) 
} 

और जब उपयोगकर्ता लॉगआउट, मत भूलना सत्र

// logout 
exports.logout = function (req, res) { 
    req.session.regenerate(function(){ 
    req.logout() 
    res.redirect('/login') 
    }) 

} 
+1

जब आप "तुल्यकालिक" कोडिंग दुनिया से आते हैं तो यह पचाने में बहुत मुश्किल है। बस मेरे साथ भी हुआ और आपके क्यू/ए ने मुझे यह तय करने में मदद की। धन्यवाद। – shaharsol

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