2012-06-26 16 views
8

के साथ वर्तमान में लॉग इन किए गए फेसबुक डेटा को लिंक करें मैं पासपोर्ट.जेएस का उपयोग कर रहा हूं और अगर मैं किसी फेसबुक आईडी को किसी उपयोगकर्ता के खाते में लॉग इन कर सकता हूं तो मैं घायल हो रहा हूं। कुछ इस तरह:पासपोर्ट.जेएस

passport.use(new FacebookStrategy({ 
     consumerKey: --- 
     consumerSecret: --- 
     callbackURL: "http://mycallback" 
    }, 
    function(token, tokenSecret, profile, done) { 
     if (user is logged in) 
      user = User.addfacebookId(user, profile.id) 
      done(user); 
     } 
    } 
)); 

उत्तर

17

इस दृष्टिकोण के लिए कुछ तरीके है, लेकिन मैं से एक लगता है कि ज्यादातर सीधी-सपाट passReqToCallback विकल्प का उपयोग करने के लिए है। सक्षम होने के साथ, req कॉलबैक सत्यापित करने का पहला तर्क बन जाता है, और वहां से आप यह देखने के लिए जांच सकते हैं कि req.user मौजूद है, जिसका अर्थ है कि उपयोगकर्ता पहले ही लॉग इन है। उस बिंदु पर, आप उपयोगकर्ता को फेसबुक प्रोफाइल विवरण और आपूर्ति के साथ जोड़ सकते हैं किए गए कॉलबैक के लिए एक ही उपयोगकर्ता उदाहरण। यदि req.user मौजूद नहीं है, तो इसे सामान्य रूप से संभालें।

उदाहरण के लिए:

passport.use(new FacebookStrategy({ 
    clientID: --- 
    clientSecret: --- 
    callbackURL: "http://mycallback" 
    passReqToCallback: true 
    }, 
    function(req, accessToken, refreshToken, profile, done) { 
    if (req.user) 
     // user is already logged in. link facebook profile to the user 
     done(req.user); 
    } else { 
     // not logged in. find or create the user based on facebook profile 
    } 
    } 
)); 
+0

है कि सही जारेड धन्यवाद ... और मुझे everyauth से बचत :) – Pardoner

+0

आपको बहुत बहुत धन्यवाद के लिए धन्यवाद, मैं भी इस समस्या थी। यह passReqToCallback सब कुछ हल करता है! धन्यवाद! – bbnn

+0

Woohooo आपको बहुत बहुत धन्यवाद। यह काम कर रहा है: डी – Zeck