2014-09-14 16 views
11

मैंने एक्सप्रेस जेएस और पासपोर्ट-फेसबुक के साथ अपनी वेबसाइट में फेसबुक-लॉगइन पहले ही लागू कर दिया है। यह अच्छी तरह से काम करता है (मुझे फील्ड प्रोफाइल मिलता है), लेकिन समस्या यह है कि मुझे ईमेल नहीं मिलता है।पासपोर्ट-फेसबुक ईमेल नहीं मिला

email : profile.emails[0].value, 

लेखन त्रुटि:: मैं कोई त्रुटि मिलती है की संपत्ति पढ़ा नहीं जा सकता '0' अपरिभाषित

मेरे कोड:

passport.use('facebook',new FacebookStrategy({ 
     clientID   : config.facebook.id, 
     clientSecret : config.facebook.secret, 
     callbackURL : '/auth/facebook/callback', 
     profileFields : ['id', 'displayName', 'emails','photos'] 
    }, function(accessToken, refreshToken, profile, done) { 

     User.findOne({provider_id: profile.id}, function(err, user) { 
      if(err) throw(err); 
      if(!err && user!= null) return done(null, user); 

      var user = new User({ 
       provider_id : profile.id, 
       name     : profile.displayName, 
       email    : profile.emails[0].value, 
       photo    : profile.photos[0].value, 
      }); 
      user.save(function(err) { 
       if(err) throw err; 
       return done(null, user); 
      }); 
     }); 
    })); 

यह अगर किसी ने मुझे समाधान के साथ मदद कर सकता है बहुत अच्छा होगा मेरी समस्या :)

+0

में एक नए क्षेत्र profileFields: [ 'email' , 'name' ] जोड़ने आप प्रोफ़ाइल ऑब्जेक्ट प्रवेश करने को देखने के लिए इसमें क्या है की कोशिश की है का प्रयास करें? – soulcheck

+0

मैंने अभी कोशिश की। प्रोफाइल में कोई ईमेल नहीं है ... – jcabello

+0

यदि आप प्रोफ़ाइल फ़ील्ड पैरामीटर का उपयोग नहीं करते हैं तो क्या होता है? – soulcheck

उत्तर

11

मुझे एक ही समस्या थी। हमारे पास 10 टेस्ट उपयोगकर्ता थे, सभी 10 में उनके फेसबुक खाते से जुड़े ईमेल पते थे। लेकिन 10 परीक्षकों में से एक के लिए, फेसबुक ने प्रोफ़ाइल प्रतिक्रिया में 'ईमेल' जेएसओएन संपत्ति वापस नहीं की। मुझे नहीं पता कि क्यों, क्योंकि यह अन्य फेसबुक प्रोफाइल के समान दिखता था जो ठीक काम करता था।

passport.authenticate('facebook') 
इस के लिए

:

ठीक इस लाइन को बदलने के लिए था

passport.authenticate('facebook', { scope: [ 'email' ] }) 

मैं अभी भी व्याख्या नहीं कर सकते क्यों यह 9/10 के लिए काम किया है, लेकिन एक के लिए नहीं। किसी भी तरह से, यह अब भी निश्चित होती है :-)

+1

इस तरह के समान: http://stackoverflow.com/questions/22880876/passport-facebook- प्रमाणीकरण-is-not-providing-email-for-all-fbaccounts –

+0

इसी समस्या से मदद मिली: http: // stackoverflow। कॉम/प्रश्न/20291357/पासपोर्ट-फेसबुक-कैंट-get-about-me-and-email-profile-fields – kaxi1993

+0

पूछें कि एक परीक्षक इस ऐप को अपने फेसबुक खाते से हटाने के लिए कहें। और फिर पुन: प्रयास करें। यह –

0
passport.use(new FacebookStrategy({ 
    clientID: config.facebook.clientID, 
    clientSecret: config.facebook.clientSecret, 
    callbackURL: config.facebook.callbackURL, 
    passReqToCallback:true 
    }, 
+2

काम करेगा, उत्तर की एक छोटी व्याख्या ओपी –

1

इस passport.authenticate('facebook', { scope: [ 'email' ] })

इसके अलावा facebookStrategy

+0

के लिए उपयोगी होगी कृपया समुदाय द्वारा समझा जाने वाला अधिक स्वच्छ उत्तर लिखें। –

+0

आपके तरह के सुझाव के लिए धन्यवाद। जैसा कि मैं स्टैक ओवरफ्लो के लिए नया हूं, मैं जवाब देने के तरीके से परिचित नहीं हूं। अगली बार मैं अपनी पूरी कोशिश करूंगा। – Ajay

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