2015-07-10 15 views
9

मैंने नई रेल ऐप बनाई और डेविस और omniauth-facebook मणि स्थापित किया।omniauth- facebook ईमेल पता नहीं मिल सकता

और परीक्षण पर्यावरण के रूप में, मेरे फेसबुक ऐप को सेट करना।

तो, मैंने फेसबुक के माध्यम से लॉग इन किया और अपना नया रेल ऐप साइन अप किया, लेकिन request.env में ईमेल address.info शामिल नहीं था।

इस लौटा दिया जाता है request.env [ 'omniauth.auth']

{ 
    "provider" => "facebook", 
    "uid" => "xxxxxxxxxxxx", 
    "info" => { 
     "name" => "xxxxxxx", 
     "image" => "http://graph.facebook.com/xxx/picture" 
    }, 
    "credentials" => { 
      "token" => "tokenstring", 
     "expires_at" => xxxxxxxxx, 
      "expires" => true 
    }, 
      "extra" => { 
     "raw_info" => { 
      "name" => "xxx xxxx", 
       "id" => "xxxxxxxxx" 
     } 
    } 
} 

यह request.env रैक [ 'omniauth.auth'] [ 'जानकारी'] [ 'ईमेल']

मैं oauth के माध्यम से फेसबुक से ईमेल पता कैसे प्राप्त कर सकता हूं? कृपया कोई मेरी मदद करो।

रेल ver 4.2.3 रूबी ver 2.2.2p95

यह रत्न संस्करण

omniauth (1.2.2) 
omniauth-facebook (2.0.1) 
devise (3.5.1) 

config/initializers/devise.rb

config.omniauth :facebook, 'appId', 'appSeacret', scope: 'email,public_profile' 

एप्लिकेशन/नियंत्रक/है है omniauth_callbacks_controller.rb

def all_provider 
    user = User.from_omniauth(request.env['omniauth.auth']) 
    if user.persisted? 
     sign_in_and_redirect user 
    else 
     session['devise.user_attributes'] = user.attributes 
     redirect_to new_user_registration_url 
    end 
    end 

    alias_method :facebook, :all_provider 

एप्लिकेशन/मॉडल/user.rb

def from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    end 
end 

2015/7/11

पर मैं अपना पुराना परीक्षण फेसबुक आवेदन के साथ एक ही कोड का पुनः प्रयास करें, और पूर्ण public_profile और ईमेल मिल सकता है।

क्या नए फेसबुक ऐप के लिए कोई प्रतिबंध जोड़ा गया है ?? कोई जानता है?

उत्तर

15

मुझे ईमेल पता स्वयं प्राप्त करने का तरीका मिला।

https://developers.facebook.com/docs/apps/changelog#v2_4

यह दस्तावेज़ का कहना है कि

घोषणात्मक फील्ड्स मोबाइल नेटवर्क पर प्रदर्शन में सुधार करने की कोशिश करने के लिए, नोड्स और v2.4 में किनारों की आवश्यकता है कि आप स्पष्ट रूप से अनुरोध करता है कि क्षेत्र (रों) आप अपने जीईटी अनुरोधों की आवश्यकता है। उदाहरण के लिए, /v2.4/me/feed में डिफ़ॉल्ट रूप से पसंद और टिप्पणियां शामिल नहीं हैं, लेकिन GET /v2.4/me/feed?fields=comments ,likes डेटा वापस कर देंगे। अधिक विवरण के लिए विशिष्ट फ़ील्ड का अनुरोध करने के तरीके पर दस्तावेज़ देखें।

हां, तो यह config/initializers/devise.rb

config.omniauth :facebook, 'app_id', 'app_secret', scope: 'email', info_fields: 'email' 
  • scope: 'email' में लिखने की ज़रूरत डिफ़ॉल्ट

न केवल गुंजाइश है, लेकिन यह भी info_fields।

+5

मेरे लिए काम नहीं करता है, मुझे नहीं पता कि क्यों, मेरे devise config में config.omniauth है: facebook, p.key, p.secret, scope: 'ईमेल', info_fields: 'ईमेल, नाम' लेकिन जब प्राप्त करने का प्रयास करें ईमेल उपयोगकर्ता omniauth [: जानकारी] [: ईमेल], यह खाली है –

+0

मेरे लिए एक ही समस्या मौजूद है – Rubyist

+0

यह काम नहीं करता है। – Red

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