¿Por qué es el inicio de sesión modal Facebook no obliga al usuario para el acceso a su dirección de correo electrónico?

votos
0

Estoy tratando de integrar el flujo de inicio de sesión de Facebook en una página web, y estoy teniendo problemas con el intento de forzar la entrada modal para solicitar el acceso a dirección de correo electrónico del usuario de Facebook.

En concreto, estoy ejecutando el siguiente código de mis JS:

FB.login((response) => {
    if (response.status === 'connected' &&
        response.authResponse) {
        // Do something with the response here.
    }
}, {
    scope: 'email',
    return_scopes: true
});

La respuesta va a volver como conectado cuando el usuario inicia una sesión con éxito en, y yo estoy recibiendo ID de usuario del usuario, token de acceso, etc., pero cuando se haga clic en el botón en mi interfaz de usuario que las llamadas FB.login, el modal que aparece una cuenta en Facebook hace no preguntar al usuario si desea conceder acceso a su dirección de correo electrónico. ¿Por qué?

Para el sitio que estoy construyendo, necesito acceso a la dirección de correo electrónico del usuario de Facebook. Si fueran a pedir y denegar el acceso, que es una cosa, pero el modal que aparece ni siquiera se les pedía para el acceso a su dirección de correo electrónico, y yo no consiguen su dirección de correo electrónico de vuelta en la respuesta.

Por otra parte, si hago una llamada posterior a la siguiente, el emailpermiso regresa como declined:

FB.api(`/${response.authResponse.userID}/permissions`, (response) => {
    console.log(response);
});

¿Alguien sabe por qué no se puede solicitar al usuario el acceso a su dirección de correo electrónico? Gracias.

Publicado el 14/02/2020 a las 00:03
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Gracias de nuevo a misorude por la respuesta. Sin eso, nunca habría dado cuenta de esto. Resumiendo todo para arriba, el problema era que durante las pruebas, al parecer, había ya una vez declinado la solicitud para dar acceso a mi dirección de correo electrónico, y después de eso, ya no me pidió permiso para acceder a ella.

Como tal, tiene que pasar un parámetro adicional para FB.loginel fin de forzarlo a volver a preguntar al usuario para acceder a su correo electrónico. En concreto, es el authTypeparámetro, y así es como se le pasa:

FB.login((response) => {
    if (response.status === 'connected' &&
        response.authResponse) {
        // Do something with the response here.
    }
}, {
    scope: 'email',
    authType: 'rerequest'
});

Eso le dará acceso a la dirección de correo electrónico (suponiendo un usuario registrado tiene uno, de nuevo, gracias a misorude para señalar que), pero en realidad no devuelve la dirección de correo electrónico. Para conseguir eso, entonces usted tiene que enviar una solicitud del API para /mecon un fieldsparámetro que solicita la dirección de correo electrónico para conseguirlo. Me di cuenta de cómo conseguir que a través de la siguiente respuesta SO: https://stackoverflow.com/a/31763373/1992973

En concreto, una solución completa es algo como lo siguiente:

FB.login((response) => {
    if (response.status === 'connected' &&
        response.authResponse) {
        FB.api('/me?fields=email', (response) => {
            // The email should be in the response, assuming the user has one registered with FB.
        });
    }
}, {
    scope: 'email',
    authType: 'rerequest'
});
Respondida el 14/02/2020 a las 16:45
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more