Por que o Facebook de login modal não levando os usuários para o acesso ao seu endereço de e-mail?

votos
0

Eu estou tentando integrar o fluxo de login do Facebook em um site, e eu estou tendo problemas com a tentativa de forçar o modal login para acessar solicitação para Facebook endereço de e-mail do usuário.

Especificamente, eu estou executando o seguinte código a partir de meus JS:

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

A resposta está voltando como conectada quando o usuário fizer logon com êxito, e eu estou começando ID de usuário do usuário, token de acesso, etc., mas quando eles clique no botão na minha UI que as chamadas FB.login, o modal que aparece para Facebook faz não pergunte ao usuário se ele deseja conceder acesso ao seu endereço de e-mail. Por quê?

Para o site que estou construindo, eu preciso de acesso ao Facebook endereço de e-mail do usuário. Se eles estavam a ser feitas e negar o acesso, que é uma coisa, mas o modal que aparece não é sequer pedir-lhes o acesso ao seu endereço de e-mail, e eu não obter o seu endereço de e-mail de volta na resposta.

Além disso, se eu fizer uma chamada subsequente para o seguinte, a emailpermissão volta como declined:

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

Alguém sabe por que eu não posso pedir ao utilizador o acesso ao seu endereço de e-mail? Obrigado.

Publicado 14/02/2020 em 00:03
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Obrigado novamente a misorude para a resposta. Sem isso, eu nunca teria percebido isso. Para resumir tudo, o problema foi que durante os testes, eu tinha, aparentemente, já uma vez se recusou a solicitação para fornecer acesso para o meu endereço de e-mail e, depois disso, já não me pediu permissão para acessá-lo.

Como tal, você tem que passar um parâmetro extra para FB.login, a fim de forçá-lo a voltar a perguntar ao usuário o acesso ao seu endereço de e-mail. Especificamente, é o authTypeparâmetro, e aqui está como você passá-lo:

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

Isso lhe dará acesso ao endereço de e-mail (assumindo que um usuário tem registrado, novamente, graças a misorude para notar que), mas na verdade não retornar o endereço de e-mail. Para conseguir isso, então você tem que enviar um pedido de API para /mecom um fieldsparâmetro solicitando o endereço de e-mail para obtê-lo. Eu descobri como obter essa via a resposta SO seguinte: https://stackoverflow.com/a/31763373/1992973

Especificamente, uma solução completa é algo como o seguinte:

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'
});
Respondeu 14/02/2020 em 16:45
fonte usuário

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