2010-10-17 24 views

risposta

0

request.env [ 'omniauth.auth'] dovrebbe avere quello che ti serve. Per Twitter restituisce qualcosa come

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

Basta ispezionarlo per openid.

+2

ciò che restituisce per Twitter e OpenID sono completamente diversi. – cbrulak

2

È possibile trovare this Railscast (towards the end) da Ryan Bates utile per acquisire un indirizzo e-mail durante l'autenticazione tramite OpenID. Per gli altri campi disponibili, Credo che si può aggiungere qualcosa delle seguenti operazioni per il controller autenticazioni al momento della richiesta di autenticazione

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

e quindi accedere tramite OpenID e vedere quali opzioni si hanno.

+1

Che non funzionerà - non sono disponibili molte opzioni di default con openid. La domanda è come renderli disponibili, non come recuperarli da request.env. –

+0

Ah, mio ​​male. Indovina che ho frainteso: / – kbjerring

0

request.env ['omniauth.auth'] conterrà l'intera risposta dal callback. Ma non tutti i provider restituiscono l'e-mail dell'utente (non twitter). OpenID tramite google o yahoo dovrebbe avere l'e-mail come parte dell'hash di 'user_info'.

4

Stai chiedendo come richiedere tali dati o come assicurarti di averlo? È possibile richiedere dati utilizzando gli attributi OpenID AX, ma un provider OpenID non è obbligato a rispondere a ciò che si richiede. Questo dovrebbe essere di qualche aiuto però:

Retrieve OpenID AX attributes from Google/Yahoo in Rails

Sembra che Google risponderà con una e-mail solo per

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

mentre Yahoo risponderà a

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

ci sono alcune istruzioni per questo nella sezione openID "Google" nei documenti di integrazione di Devise omniauth:

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

Cercare il metodo di classe find_for_open_id nel modello utente e la sottoclasse di controllo Users::OmniauthCallbacksController per come i dati viene fatto passare attraverso dal request.env["omniauth.auth"] hash. Questo si riferisce a qualsiasi strategia OpenID, non solo a quella di Google.

In termini di personalizzazione esatta degli attributi richiesti dal provider OpenID, è consigliabile creare il proprio clone della gemma omniauth_openid o sottoclasse e modificare options. (Vedere: https://github.com/intridea/omniauth-openid/blob/master/lib/omniauth/strategies/open_id.rb)

0

Quando si configura omniauth nel blocco di inizializzazione, è possibile sovrascrivere qualsiasi opzione, compresi i campi obbligatori e facoltativi. Come per i documenti, usa lo Builder per ottenere ciò che ti serve configurato. EG:

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