2015-11-08 12 views
5

मैंने पहली बार persistent sessions with passport, mongodb and express पर देखा लेकिन यह मदद या समझ में नहीं आया।पासपोर्ट लगातार लॉगिन सत्र नहीं रख रहा है

मैं अपने website के साथ लगातार लॉग इन प्राप्त करने का प्रयास कर रहा हूं। मेरी धारावाहिक प्रक्रिया काम नहीं कर रही है।

// Passport needs to be able to serialize and deserialize users to support persistent login sessions 
passport.serializeUser(function(user, done) { 
    console.log('serializing user:',user.username); 
    //return the unique id for the user 
    return done(null, user._id); 
}); 

//Desieralize user will call with the unique id provided by serializeuser 
passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
     console.log('deserializing user:',user.username); 
     return done(err, user); 
    }); 
}); 

संपूर्ण पासपोर्ट फ़ाइल जिथब पर पाई जा सकती है।

मुझे लगता है कि समस्या यह है कि मुझे तुरंत deserialized मिलता है, या कम से कम console.logs क्या दिखाता है।

या यह मेरी सत्र के साथ हो सकता है:

var userSchema = new mongoose.Schema({ 
    username : String, 
    password : String, //Hash 
    created_at : {type: Date, default : Date.now} 
}); 

मदद के लिए धन्यवाद:

app.use(session({ 
    secret: 'keyboard cat', 
    cookie : { 
     maxAge: 3600000 // see below 
    } 
})); 

यहाँ मेरे उपयोगकर्ता स्कीमा है!

उत्तर

2

आपकी समस्या पासपोर्ट या आपके बैक एंड में नहीं है। यह कोणीय के साथ सामने के अंत में है। जब आप उपयोगकर्ता लॉगिन कार्यवाही करते हैं तो आप केवल $rootScope.authenticated सेट कर रहे हैं, लेकिन आपको यह देखने के लिए कि क्या उपयोगकर्ता पहले से लॉग इन है या नहीं, आपको अपने एपीआई को कॉल करके प्रत्येक एप प्रारंभिक पर सर्वर से जांचना होगा।

तो, शायद, routes/api.js में एक router.route('/current_user') मार्ग है जो या तो लौटना चाहिए null (या अतिथि उपयोगकर्ता वस्तु किसी तरह का) बना सकते हैं या यह वापस आ जाएगी वर्तमान में उपयोगकर्ता की जानकारी में लॉग इन किया ताकि आपके सामने अंत कोणीय एप्लिकेशन को उपयोगकर्ता है कि क्या पता चल जाएगा लॉग इन है या नहीं और कुछ उपयोगकर्ता जानकारी के साथ काम करने के लिए है। यदि /api/current_user उपयोगकर्ता प्रदान करता है, तो आप जानते हैं कि आप लॉग इन हैं और आप $rootScope.authenticated = true सेट कर सकते हैं।

+0

क्षमा करें मैंने अभी यह जवाब देखा है। मैं एक नजर मार लूगां! यह ठीक लगता है – Manu

3

लिंक आप के लिए, persistent sessions with passport, mongodb and express भेजा, एक्सप्रेस ढांचे के एक पुराने संस्करण, एक में अपने package.json, https://github.com/manu354/teecher/blob/master/package.json, "express": "~4.13.1", बहुत नया है आप उपयोग कर रहे के बारे में बात कर रहा है।

आप इन पंक्तियों के बढ़ने की जरूरत है:,

app.use(passport.initialize()); 
app.use(passport.session()); 
थोड़ा ऊपर

तुरंत नीचे app.use(session({...})

होने के लिए मैं सुझाव है कि आप इस ब्लॉग पोस्ट, http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4/ का पालन करें, यह निश्चित रूप से आप

में मदद मिलेगी
+0

यह ठीक नहीं करता है। – Manu

0

बस किसी को भी मदद करने के मामले में पोस्ट करना।

जांचें कि क्या आपका ग्राहक/ब्राउज़र Set-Cookie शीर्षलेख निष्पादित कर रहा है या नहीं।

मेरे मामले में, यह सफारी में ठीक काम कर रहा था लेकिन क्रोम या फ़ायरफ़ॉक्स में नहीं। स्पष्ट रूप से एक क्लाइंट साइड इश्यू क्योंकि सर्वर ब्राउज़र साइड कोड की पहचान करने वाला कोई ब्राउज़र नहीं था। सफारी और क्रोम/फ़ायरफ़ॉक्स के बीच का अंतर यह था कि fetch सफारी में पॉलीफिल का उपयोग किया जा रहा था, जबकि क्रोम और फ़ायरफ़ॉक्स ने इसे मूल रूप से समर्थित किया था। fetchSet-Cookie शीर्षलेख का उपयोग नहीं करता है जब तक कि आप अपने विकल्पों में credentials प्रदान नहीं करते हैं।

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