2015-07-10 14 views
9

Ho creato una nuova app per Rails e installato Devise e omniauth-facebook gem.omniauth-facebook cannnot indirizzo email

E impostare la mia app di Facebook, come ambiente di test.

Così, ho effettuato l'accesso tramite Facebook e ho firmato la mia nuova app Rails, ma request.env non conteneva indirizzo email.info.

questo request.env viene restituito [ '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" 
     } 
    } 
} 

rack IT request.env [ 'omniauth.auth'] [ 'info'] [ 'email']

Come posso ottenere l'indirizzo email da Facebook via oauth? Per favore qualcuno mi aiuti.

Rails è ver 4.2.3 Rubino ver è 2.2.2p95

Si tratta di versioni Gem

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

config/inizializzatori/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/modelli/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 

Aggiungi al 2015/7/11

ho ritentato stesso codice con la mia vecchia applicazione di test facebook, e potrebbe ottenere la piena public_profile ed e-mail.

Sono state aggiunte delle restrizioni per la nuova app di Facebook ?? qualcuno lo sa?

risposta

15

Ho trovato il modo di ottenere l'indirizzo email da solo.

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

Questo documento afferma che

dichiarativa campi per cercare di migliorare le prestazioni sulle reti mobili, nodi e bordi in v2.4 richiede che si richiede in modo esplicito il campo (s) che si bisogno delle tue richieste GET. Ad esempio, GET /v2.4/me/feed non include più Mi piace e commenti per impostazione predefinita, ma GET /v2.4/me/feed?fields=comments,likes restituirà i dati. Per ulteriori dettagli su , consultare i documenti su come richiedere campi specifici.

così, bisogno di scrivere in config/inizializzatori/devise.rb

config.omniauth :facebook, 'app_id', 'app_secret', scope: 'email', info_fields: 'email' 
  • scope: 'email' è predefinita

non solo la portata, ma anche info_fields.

+5

per me non funziona, non so perché, nella mia configurazione di configurazione ho config.omniauth: facebook, p.key, p.secret, scope: 'email', info_fields: 'email, name' ma quando prova ad ottenere email user omniauth [: info] [: email], questo è vuoto –

+0

Lo stesso problema esiste per me – Rubyist

+0

Questo non funziona. – Red

Problemi correlati