2010-10-17 10 views
6

मैं रेल रत्न का उपयोग कर रहा हूं: OmniAuth उपयोगकर्ताओं को लॉगिन करने के लिए।OmniAuth और openid: ओपनिड प्रदाता से कुछ फ़ील्ड प्राप्त करना

ओपनआईडी प्रदाता का उपयोग करते समय मैं कुछ फ़ील्ड, जैसे ईमेल और उपनाम प्राप्त करना चाहता हूं लेकिन मुझे इस पर कोई दस्तावेज नहीं दिख रहा है।

कोई विचार?

धन्यवाद

उत्तर

0

request.env [ 'omniauth.auth'] आपको क्या चाहिए होना चाहिए। ट्विटर के लिए यह

{ 
    'uid' => '12356', 
    'provider' => 'twitter', 
    'user_info' => { 
    'name' => 'User Name', 
    'nickname' => 'username', 
    # ... 
    } 
} 

कुछ ऐसा करता है जो इसे ओपनिड के लिए निरीक्षण करता है।

+2

ट्विटर और ओपनिड के लिए यह क्या आता है पूरी तरह से अलग हैं। – cbrulak

2

आपको ओपनआईडी के माध्यम से प्रमाणीकरण करते समय ईमेल पते को कैप्चर करने के लिए उपयोगी रयान बेट्स द्वारा this Railscast (towards the end) मिल सकता है। अन्य उपलब्ध खाने के लिए, मैं तुम जब प्रमाणीकरण अनुरोध

# authentications_controller.rb 
... 
def create 
    omniauth = request.env["omniauth.auth"] 
    raise omniauth.to_yaml 
    ... 
end 
... 

बनाने अपने प्रमाणीकरणों नियंत्रक के लिए निम्न में से कुछ जोड़ने और फिर OpenID के माध्यम से लॉग इन करें और देखें कि आप क्या विकल्प हो सकता है लगता है।

+1

यह काम नहीं करेगा - डिफ़ॉल्ट रूप से ओपनिड के साथ कई विकल्प उपलब्ध नहीं हैं। सवाल यह है कि उन्हें कैसे उपलब्ध कराया जाए, न कि request.env से उन्हें कैसे पुनर्प्राप्त करें। –

+0

आह, मेरा बुरा। मुझे लगता है कि गलत समझा: / – kbjerring

0

request.env ['omniauth.auth'] में कॉलबैक से पूरी प्रतिक्रिया होगी। लेकिन सभी प्रदाता उपयोगकर्ता ईमेल वापस नहीं करते हैं (ट्विटर नहीं होगा)। Google या yahoo के माध्यम से ओपनआईडी को 'user_info' हैश के हिस्से के रूप में ईमेल होना चाहिए।

4

क्या आप पूछ रहे हैं कि उस डेटा के लिए अनुरोध कैसे करें, या यह सुनिश्चित करने के लिए कि आप इसे कैसे प्राप्त करें? आप ओपनआईडी एएक्स विशेषताओं का उपयोग कर डेटा के लिए अनुरोध कर सकते हैं, लेकिन एक ओपनआईडी प्रदाता आपके द्वारा अनुरोध किए गए अनुरोधों का जवाब देने के लिए बाध्य नहीं है। यह कुछ मदद की, हालांकि होना चाहिए:

Retrieve OpenID AX attributes from Google/Yahoo in Rails

ऐसा लगता है कि गूगल कुछ निर्देश है जबकि याहू

http://axschema.org/contact/email 
1

जवाब देगा केवल

http://schema.openid.net/contact/email 

के लिए एक ईमेल के साथ जवाब देंगे इसके लिए Devise omniauth एकीकरण दस्तावेज़ में "Google" ओपनआईडी अनुभाग के तहत:

उपयोगकर्ता मॉडल में वर्ग विधि find_for_open_id और कैसे डेटा request.env["omniauth.auth"] हैश से के माध्यम से पारित हो जाता है के लिए नियंत्रक उपवर्ग Users::OmniauthCallbacksController के लिए

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

देखो। यह किसी भी ओपनआईडी रणनीति से संबंधित है, न केवल Google एक।

ओपनआईडी प्रदाता से आप जो विशेषताओं से पूछते हैं उसे अनुकूलित करने के मामले में, आप omniauth_openid मणि का अपना क्लोन बनाने या इसे उप-वर्ग बनाने और options को बदलने के लिए सबसे अच्छा हो सकता है। (देखें: https://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb)

0

जब आप अपने प्रारंभिक ब्लॉक में omniauth कॉन्फ़िगर करते हैं, तो आप आवश्यक और वैकल्पिक फ़ील्ड सहित किसी भी विकल्प को ओवरराइड कर सकते हैं। दस्तावेज़ों के अनुसार, आपको कॉन्फ़िगर करने की आवश्यकता के लिए Builder का उपयोग करें। ईजी:

config.middleware.use OmniAuth::Builder do 
     provider :open_id, :name => 'my_provider', 
       :identifier => 'https://myprovider.com/openid/xrds', 
       :required => ['http://axschema.org/namePerson/first','http://axschema.org/namePerson/last','http://axschema.org/contact/email','http://axschema.org/my_provider/some_field'] 
    end 
संबंधित मुद्दे