2011-02-19 35 views
7

estoy usando OmniAuth, y después de iniciar sesión a través de Facebook, puedo obtener mi clave omniauth.auth, que se ve así:OmniAuth - Facebook login no suministrar correo electrónico en user_info

user_info: 
    name: Tim Sullivan 
    urls: 
    Facebook: http://www.facebook.com/... 
    Website: 
    nickname: ... 
    last_name: Sullivan 
    first_name: Tim 
uid: "123456789" 
credentials: 
    token: [some token] 
extra: 
    user_hash: 
    name: Tim Sullivan 
    timezone: -5 
    gender: male 
    id: "123456789" 
    last_name: Sullivan 
    updated_time: 2010-12-30T00:52:39+0000 
    verified: true 
    locale: en_US 
    link: http://www.facebook.com/... 
    email: [email protected] 
    first_name: Tim 
provider: facebook 

Ahora, according to the docs, la El correo electrónico debe estar en la sección user_info, pero no lo está. Sin embargo, está en la sección extra/user_hash. Desde Me desnudo extra, no está consiguiendo almacena, por lo que más adelante en el tubo que estoy teniendo problemas. Podría agregarlo yo mismo, pero eso no explica por qué no está allí en primer lugar.

¿Por qué no correo electrónico está poniendo en la sección user_info? ¿Un insecto? ¿Cambio indocumentado?

+1

creo que el documento es simplemente no están al día, o es sólo un error. Vas a tener que conseguirlo antes de pelar adicional ... Creo que tenía que hacer lo mismo, pero yo no notar la documentación estaba equivocado en el momento. Acabo de comprobar cuál fue la respuesta. – Robin

+0

Eso parece extraño. El código intenta establecerlo en 'user_info':/https://github.com/intridea/omniauth/blob/master/oa-oauth/lib/omniauth/strategies/facebook.rb#L32 – raidfive

+0

¿Cómo viste? el hash devuelto en primer lugar? Solo funciona en producción, pero usando 'binding.pry' ... ¿cómo harías eso? – ahnbizcad

Respuesta

1

creo que el doctor no está actualizada. Normalmente lo obtengo del hash adicional antes de eliminarlo.

email = omniauth["extra"]["user_hash"]["email"] 
3

trasladó a

email = omniauth["extra"]["raw_info"]["email"] 
+1

que utilizan OmniAuth [ 'extra']. Raw_info.email :) –

2

El hash "info" contiene toda la información del usuario:

email = omniauth["info"]["email"] 
0

Mientras omniauth["info"] acostumbrarse y debe contener la información, me he dado cuenta de que Facebook parece estar dándome errores con el correo electrónico que está vinculado a un error de facebook/(función?). Así que recibo errores intermitentes con este hash, donde el correo electrónico no está presente y lo rompe todo.

Después de mucha depuración he encontrado que la forma más segura para no romper mi código es llamar a la API de FB con la koala o simplemente buen ol REST y obtener la información necesaria para el inicio de sesión si omniauth["info"] no contiene la información que necesita.

0

Estamos utilizando omniauth con FB JSDK y no pude recuperar el correo electrónico porque había pasado por alto el hecho de que FB.login() requiere un 'alcance'.

FB.login(function(response) { 
    // handle the response 
}, {scope: 'email,user_likes'}); 

Después de agregar las opciones (aunque el alcance se configuró en el servidor) todo se solucionó.

https://developers.facebook.com/docs/reference/javascript/FB.login/v2.2#permissions

0

Dado que está utilizando rieles y no JavaScript (otra persona contestó pero por JS), tiene que pedir específicamente para el correo electrónico para ser devueltos a partir del hash información de campo, ya que no es por defecto. Esta opción se configura en la configuración del archivo de inicializadores// omniauth.rb así:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, Rails.application.secrets.omniauth_provider_key, Rails.application.secrets.omniauth_provider_secret, 
    :scope => 'email', :display => 'popup', :info_fields => 'name,email' 
end 

Esta información está un poco escondido al final de la sección Configuring en GitHub readme de la gema OmniAuth-facebook.

Cuestiones relacionadas