Registrati con Facebook a volte non fornisce email

Uso Register con Facebook come uno dei modi per accedere alla mia app Web e chiedo esplicitamente il permesso “email”.

Al momento dell’accesso, alcuni dati dell’utente ( $facebook->api('/me') ) sono memorizzati nel database degli utenti, tuttavia, a volte il campo di posta elettronica non esiste – è un problema comune?

Solo una supposizione…

La documentazione di Facebook dice:

nota: questo campo non verrà restituito se non è disponibile un indirizzo email valido per l’utente

Fonte: https://developers.facebook.com/docs/reference/api/user/

Quindi, quando un indirizzo e-mail diventa non valido (utenti che non hanno usato Facebook da anni e hanno distrutto / cambiato il loro indirizzo e-mail dal momento che, ad esempio), Facebook potrebbe interrompere la restituzione di questo campo.

Il 5% di un indirizzo non valido può sembrare grande, ma se controllo i miei amici di Facebook, penso che più del 5% di loro non usa mai il proprio account e non sarei sorpreso se l’indirizzo utilizzato al momento dell’iscrizione non fosse più valido.

Gli utenti non devono sempre fornire un indirizzo email per poter utilizzare Facebook. Possono anche registrarsi tramite SMS, anche se è molto meno comune.

In breve, FB non avrà sempre un indirizzo email, quindi non può servirlo alla tua app.

Provare:

 // Just to make sure email are permitted //$facebook->getLoginUrl(array('req_perms' => 'email')) // Request email FB.api('/me?scope=email', function(response) { /*...*/ }); 

O:

 $email = $facebook->api('user_id?fields=email'); 

I PROBLEMI:

  • L’utente ha cambiato la visibilità del suo indirizzo e-mail in “solo io” e quindi non hai modo di ottenerlo.
  • L’utente si è registrato con SMS anziché e-mail come menzionato nella risposta precedente.

ALTERNATIVA:

Se è assolutamente necessario contattare l’utente ma non è ansible ottenere il suo indirizzo e-mail, è ancora ansible ottenere la sua e-mail di Facebook (tutti hanno questa e-mail): “user_name@facebook.com”.

Se l’utente utilizza un server POP, riceverà direttamente l’email in GMail o in altri, altrimenti riceverà la tua email come messaggio privato. L’unico inconveniente se questo metodo è che la tua email deve essere “plain / text” e non “HTML”.

Una cosa è che gli Users don't always have to provide an email address in order to use Facebook(could have registered through mobile) – come menzionato da Colm. Oltre a questo-

Si prega di verificare che l’utente abbia definitivamente autorizzato l’authorization estesa per email o che non sia stata successivamente revocata. Per avere un controllo su questo puoi usare le autorizzazioni

 /USER/permissions 

Ho avuto un problema simile e ho trovato la causa per questo. Questo problema si verifica per gli utenti che non hanno impostato il proprio indirizzo email principale (hanno molti indirizzi email ma non hanno indicato quale è il loro indirizzo email principale) nella scheda Impostazioni account generale.

Ho provato a utilizzare tali account su vari siti famosi che hanno accesso a Facebook e anche loro non potevano recuperare l’indirizzo email da tali account.

Quindi, non è il problema con il codice (supponendo che tu abbia chiesto permessi). Dobbiamo solo gestire tali scenari e far sapere agli utenti che non abbiamo ricevuto il loro indirizzo email. Come fa Klout.

Grazie

Oltre a ciò che @Jigar Jain ha scritto sopra, gli utenti possono effettivamente deselezionare l’authorization e-mail durante l’afstream di segni. Se questo è il caso, il suo indirizzo email non verrà restituito da Facebook.

Sta a te implementare una logica che rende l’accesso non riuscito se l’utente deseleziona l’authorization e-mail, per costringere gli utenti a scegliere un altro metodo di accesso che garantisca il ritorno dell’indirizzo email dell’utente.