2015-07-10 1 views
9

Ich habe neue Rails App erstellt und Devise und omniauth-facebook gem installiert.omniauth-facebook kann keine E-Mail Adresse erhalten

Und meine Facebook-App als Testumgebung einstellen.

Also habe ich mich über Facebook eingeloggt und meine neue Rails App angemeldet, aber request.env enthielt keine email address.info.

diese zurückgegeben 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" 
     } 
    } 
} 

es Racks request.env [ 'omniauth.auth'] [ 'info'] [ 'E-Mail']

Wie kann ich per E-Mail eine E-Mail-Adresse von Facebook erhalten? Bitte, bitte hilf mir.

Rails ist ver 4.2.3 Rubin ver 2.2.2p95 ist

Dies ist Gem Versionen

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

config/Initialisierungen/devise.rb

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

app/Controller/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 

app/model/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 

hinzufügen bei 2015/7/11

ich denselben Code mit meiner alten Test Facebook-Anwendung erneut versucht und kann voll public_profile und E-Mail.

Sind irgendwelche Beschränkungen für neue Facebook-App hinzugefügt ?? jemand weiß?

Antwort

15

Ich habe den Weg gefunden, E-Mail-Adresse selbst zu bekommen.

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

Dieses Dokument sagt, dass

deklarative Felder Um zu versuchen, die Leistung in Mobilfunknetzen zu verbessern, Knoten und Kanten in v2.4 erfordern, dass Sie das Feld explizit anfordern (n) brauche deine GET-Anfragen. Beispiel: GET /v2.4/me/feed enthält standardmäßig keine Likes und Kommentare mehr, aber GET /v2.4/me/feed?fields=comments,likes gibt die Daten zurück. Weitere Informationen finden Sie in den Dokumentationen zur Anforderung bestimmter Felder unter .

so müssen sie in config/initializers/devise.rb

config.omniauth :facebook, 'app_id', 'app_secret', scope: 'email', info_fields: 'email' 
  • scope: 'email' ist standardmäßig

nicht nur Umfang, schreiben, sondern auch info_fields.

+5

für mich nicht funktionieren, ich weiß nicht warum, in meinem Gerät config config.omniauth: facebook, p.key, p.secret, Umfang: 'E-Mail', info_fields: 'E-Mail, Name' aber wenn versuchen zu bekommen E-Mail Benutzer omniauth [: info] [: email], das ist leer –

+0

Gleiches Problem existiert für mich – Rubyist

+0

Das funktioniert nicht. – Red