2010-10-17 10 views

Antwort

0

request.env [ 'omniauth.auth'] sollte, was Sie brauchen. Für Twitter gibt es so etwas zurück

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

Überprüfen Sie es nur für openid.

+2

was es für twitter und openid zurückgibt, sind völlig unterschiedlich. – cbrulak

2

Sie könnten finden this Railscast (towards the end) von Ryan Bates nützlich für die Erfassung einer E-Mail-Adresse bei der Authentifizierung über OpenID. Für weitere Felder, ich denke, Sie etwas von der folgenden zu Ihren Authentifizierungen Controller hinzufügen kann, wenn die Authentifizierungsanfrage machen

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

und anschließend über OpenID anmelden und sehen, welche Möglichkeiten Sie haben.

+1

Das wird nicht funktionieren - nicht viele Optionen sind standardmäßig mit openid verfügbar. Die Frage ist, wie man sie verfügbar macht und nicht wie man sie von request.env abruft. –

+0

Ah, mein Schlechter. Rate ich falsch verstanden: / – kbjerring

0

request.env ['omniauth.auth'] enthält die gesamte Antwort aus dem Callback. Aber nicht alle Anbieter geben die Benutzer-E-Mail zurück (twitter wird nicht). OpenID über Google oder Yahoo sollte E-Mail als Teil von 'user_info' Hash haben.

4

Fragen Sie, wie Sie diese Daten anfordern können oder wie Sie sicherstellen können, dass Sie sie erhalten? Sie können Daten mit den OpenID AX-Attributen anfordern, aber ein OpenID-Anbieter ist nicht verpflichtet, auf Ihre Anfrage zu antworten. Dies sollte allerdings eine Hilfe sein:

Retrieve OpenID AX attributes from Google/Yahoo in Rails

Es scheint, wie Google mit einer E-Mail antworten wird nur

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

während Yahoo

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

antworten wird Es gibt einige Anweisungen hierzu unter der OpenID-Sektion "Google" in der Devise omniauth integration docs:

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

Suchen Sie nach der Klassenmethode find_for_open_id im User-Modell und die Steuerung der Unterklasse Users::OmniauthCallbacksController dafür, wie die Daten aus dem request.env["omniauth.auth"] Hash durchgeleitet. Dies bezieht sich auf jede OpenID-Strategie, nicht nur auf die Google-Strategie.

In Bezug auf die Anpassung genau, welche Attribute Sie von der OpenID-Anbieter fragen, können Sie am besten einen eigenen Klon der omniauth_openid Edelstein oder Unterklasse machen und ändern Sie die options. (Siehe: https://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb)

0

Wenn Sie in Ihrem Initialisierungsblock omniauth konfigurieren, können Sie alle Optionen außer Kraft setzen, einschließlich der erforderlichen und optionalen Felder. Wie in den Dokumenten beschrieben, verwenden Sie Builder, um das zu erhalten, was Sie konfigurieren müssen. ZB:

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 
Verwandte Themen