2015-10-12 9 views
7

Attualmente sto implementando la funzionalità omniauth nella mia app. Tutto funziona bene, tranne che non posso ottenere il nome e il cognome da Facebook. Ecco il mio codice modello.ottiene i campi first_name e last_name da facebook omniauth

def self.from_omniauth(auth) 
    user = User.where(email: auth.info.email).first 
    if user 
     return user 
    else 
     where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
     user.provider = auth.provider 
     user.uid = auth.uid 
     user.first_name = auth.info.first_name 
     user.last_name = auth.info.last_name 
     user.email = auth.info.email 
     user.image = auth.info.image 
     user.password = Devise.friendly_token[0,20] 
     end 
    end 

ho già la forte impostazione dei parametri correttamente per escogitare come sto usando che ora predefinita l'autenticazione e sta lavorando properly.Is c'è qualche autorizzazioni aggiuntive necessarie per nome e cognome da facebook?

risposta

23

Dopo alcuni giocherellando ho trovato la soluzione. Ora penso che dobbiamo richiedere esplicitamente i campi che richiediamo. Per me la correzione è solo per aggiungere first_name e last_name a facebook.

Nel mio initializers ho aggiunto first_name e last_name a info fields.

info_fields: 'email, first_name, last_name' 

Aggiornamento

Il mio file di configurazione completo sarà simile a questa ora

config.omniauth :facebook, ENV["FACEBOOK_APP_ID"], ENV["FACEBOOK_SECRET"], scope: 'email', info_fields: 'email, first_name, last_name' 
+0

Interessante! Che gemma stai usando? Stiamo usando https://rubygems.org/gems/omniauth-facebook/versions/2.0.1 e non dobbiamo farlo. – seddy

+0

Non so perché ... Sto usando gemma "omniauth-facebook" – Abhilash

+0

Strano, felice che tu abbia risolto il problema però :). Dove hai trovato questo riferimento a 'info_fields'? – seddy

1

Dal controllo di Facebook docs, i campi first_name e last_name sono entrambi parte del profilo pubblico, pertanto le autorizzazioni dovrebbero essere corrette.

Non ho idea se questo avrebbe funzionato (anzi, mi piacerebbe sperare che non funzionasse), ma nell'implementazione abbiamo lavorato in produzione al momento stiamo usando gli accessori di hash invece dei metodi. Quindi:

new(
    first_name: oauth_data["info"]["first_name"],     
    last_name: oauth_data["info"]["last_name"],  
    ... 

Data la tua email ecc campi sono sempre impostate correttamente, sarei sorpreso se volesse che le opere, ma forse vale la pena un colpo.

In caso contrario, hai delle convalide o dei callback before_create che potrebbero interferire in qualche modo?

+0

No non il suo lavoro pure. Ho provato il nome utente anziché il nome e il suo funzionamento soddisfacente. Avevo le convalide su firstname e lastname ma l'ho rimosso per far funzionare ominiauth. Hanno cambiato o qualcosa o sono il nome e il cognome all'interno delle informazioni? – Abhilash

Problemi correlati