Registrarse en Facebook a veces no proporciona correo electrónico

Estoy usando Registrarse con Facebook como una de las formas de iniciar sesión en mi aplicación web y solicitar expresamente el permiso de “correo electrónico”.

Al iniciar sesión, algunos de los datos del usuario ( $facebook->api('/me') ) se almacenan en la base de datos de usuarios, sin embargo, a veces el campo de correo electrónico simplemente no existe. ¿Es este un problema común?

Solo una suposición…

La documentación de Facebook dice:

nota: este campo no se devolverá si no hay una dirección de correo electrónico válida disponible para el usuario

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

Entonces, cuando una dirección de correo electrónico se vuelve inválida (usuarios que no han usado Facebook desde hace años y han destruido o cambiado su dirección de correo electrónico desde, por ejemplo), Facebook puede dejar de devolver este campo.

El 5% de las direcciones no válidas puede parecer grande, pero si reviso mis amigos de Facebook, creo que más del 5% de ellos nunca usan su cuenta, y no me sorprendería que la dirección que utilizaron cuando se registraron ahora no sea válida.

Los usuarios no siempre tienen que proporcionar una dirección de correo electrónico para usar Facebook. También pueden registrarse por SMS, aunque es mucho menos común.

En resumen, FB no siempre tendrá una dirección de correo electrónico, por lo que no puede publicarla en su aplicación.

Tratar:

 // 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'); 

PROBLEMAS:

  • El usuario cambió la visibilidad de su dirección de correo electrónico a “solo yo” y, por lo tanto, no tiene forma de obtenerla.
  • El usuario se registró con SMS en lugar de correo electrónico como se menciona en la respuesta anterior.

ALTERNATIVA:

Si es absolutamente necesario que se ponga en contacto con el usuario, pero no puede obtener su dirección de correo electrónico, aún puede recibir su correo electrónico de Facebook (todos tienen este correo electrónico): “nombre_usuario@facebook.com”.

Si el usuario usa un servidor POP, recibirá directamente el correo electrónico en GMail u otros, de lo contrario recibirá su correo electrónico como un mensaje privado. El único inconveniente si este método es que su correo electrónico debe ser “simple / texto” y no “HTML”.

Una cosa es que los Users don't always have to provide an email address in order to use Facebook(could have registered through mobile) , tal como lo menciona Colm. Aparte de esto-

Verifique que el usuario definitivamente le haya otorgado el permiso extendido por email o que no haya sido revocado posteriormente. Para controlar esto, puede usar los permisos

 /USER/permissions 

Tuve un problema similar y encontré la causa de esto. Este problema se produce para los usuarios que no han configurado su dirección de correo electrónico principal (tienen muchas direcciones de correo electrónico pero no han indicado cuál es su dirección de correo electrónico principal) en la pestaña Configuración de cuenta general.

Traté de usar dichas cuentas en varios sitios famosos que tienen inicio de sesión en Facebook e incluso no pudieron recuperar la dirección de correo electrónico de dichas cuentas.

Entonces, no es el problema con el código (suponiendo que haya pedido permisos). Solo tenemos que manejar dichos escenarios y dejar que los usuarios sepan que no recibimos su dirección de correo electrónico. Como lo hace Klout.

Gracias

Además de lo que @Jigar Jain escribió anteriormente, los usuarios pueden desmarcar el permiso de correo electrónico durante el ingreso de la señal. Si ese es el caso, Facebook no devolverá su dirección de correo electrónico.

Depende de usted implementar una lógica que haga que el inicio de sesión no sea exitoso si el usuario desmarca el permiso de correo electrónico, para obligar a los usuarios a elegir otro método de inicio de sesión que garantice la devolución de la dirección de correo electrónico del usuario.