2012-09-04 9 views
9

के साथ कुकी सेट का उपयोग कैसे करें मैं अपने नोड-ऐप में लॉगिन प्राप्त करने के लिए पासपोर्ट.जेएस का उपयोग कर रहा हूं। लेकिन मेरे ऐप में, मुझे उपयोगकर्ता की आईडी तक पहुंच प्राप्त करने की आवश्यकता है और वर्तमान में, मुझे यह नहीं पता कि इस चीज़ को कैसे प्राप्त किया जाए!Passport.js

मैं उपयोगकर्ता आईडी को कैसे एक्सेस कर सकता हूं या मुझे इसे कुकी में स्वयं भेजना चाहिए?

उत्तर

17

आप अगले रणनीतियों के विन्यास के लिए, अपने एप्लिकेशन में निम्न कोड को लागू करना चाहिए:

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(obj, done) { 
    done(null, obj); 
}); 

इस तरह, जब आप प्रमाणीकृत उपयोगकर्ता के साथ done समारोह आह्वान, पासपोर्ट भंडारण का ख्याल रखता है एक कुकी में उपयोगकर्ता आईडी। जब भी आप उपयोगकर्ता तक पहुंचना चाहते हैं आईडी आप इसे अनुरोध निकाय में पा सकते हैं। (एक्सप्रेस req["user"] में)।

यदि आप सत्र में अन्य डेटा स्टोर करना चाहते हैं तो आप serializeUser फ़ंक्शन भी विकसित कर सकते हैं।

passport.serializeUser(function(user, done) { 
    done(null, { 
     id: user["id"], 
     userName: user["userName"], 
     email: user["email"] 
    }); 
}); 

आप यहाँ अधिक जानकारी प्राप्त कर सकते हैं:: मैं इसे इस तरह से करना http://passportjs.org/docs/configure

+0

मैं यह पहले से ही मैं अपने कोड है - लेकिन मैं ग्राहक के पक्ष कुकी का उपयोग करने की, जावास्क्रिप्ट का उपयोग करने की जरूरत है - यह संभव है? –

+1

मुझे खेद है, मुझे आपके प्रश्न से यह समझ में नहीं आया। मैंने बस अपने node.js ऐप में कुकीज़ का विश्लेषण किया और मुझे पासपोर्टज द्वारा एक सेट नहीं दिख रहा है। कनेक्ट करें सत्र आईडी के साथ बस एक कुकी सेट करता है। बाकी डेटा सर्वर पर संग्रहीत है। मेरा मानना ​​है कि आपको वांछित डेटा के साथ मैन्युअल रूप से कुकी सेट करनी चाहिए और उसके बाद क्लाइंट पर जावास्क्रिप्ट का उपयोग करके इसे पार्स करना चाहिए। (एक्सप्रेस का उपयोग करके: [लिंक] (http://expressjs.com/api.html#res.cookie))। – AnduA

+1

मैंने समस्या को स्वयं ही अपनी कुकी बनाने के लिए हल कर लिया है लेकिन आपकी जानकारी के लिए धन्यवाद! –

16

पथ प्रवेश द्वारा में जोड़े

res.cookie('userid', user.id, { maxAge: 2592000000 }); // Expires in one month 

पथ प्रस्थान करें को

res.clearCookie('userid'); 
+0

मुझे लगता है कि सवाल यह है कि पासपोर्ट कॉलबैक और रणनीति में पासपोर्ट के साथ इसे एकीकृत कैसे किया जाए, हमारे पास req/res तक पहुंच नहीं हो सकती है। – viji

1

यदि आप जोड़े angular-fullstack जेनरेटर का उपयोग करके, इस प्रकार मैंनेप्राप्त करने के लिए setUserCookie को संशोधित किया उपयोगकर्ता कुकी में(जिसे बाद में मैं AngularJS में पुनर्प्राप्त कर सकता हूं)।

setUserCookie: function(req, res, next) { 
    if (req.user) { 
     req.user.userInfo['_id'] = req.user._id; 
     console.log('Cookie', req.user.userInfo); 
     // Splice in _id in cookie 
     var userObjWithID = { 
      "provider": req.user.userInfo.provider, 
      "role": req.user.userInfo.role, 
      "name": req.user.userInfo.name, 
      "_id": req.user._id 
     }; 
     res.cookie('user', JSON.stringify(userObjWithID)); 
    } 
    next(); 
} 
0

वैकल्पिक रूप से आप कर सकता है निम्नलिखित:

passport.serializeUser(User.serializeUser()); 

passport.deserializeUser(User.deserializeUser()); 
app.use((req, res, next) => { 
    res.locals.login = req.isAuthenticated(); 
    res.locals.thisUser = req.user; 
    next(); 
}); 
संबंधित मुद्दे