Hvorfor er Facebook innlogging modal ikke spørre brukere for tilgang til sin e-postadresse?

stemmer
0

Jeg prøver å integrere Facebook login strømme inn et nettsted, og jeg har problemer med å prøve å tvinge påloggings modal å be om tilgang til brukerens Facebook-e-postadresse.

Spesielt jeg å kjøre følgende kode fra mine JS:

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

Responsen kommer tilbake som når brukeren hell logger inn, og jeg får brukerens bruker-ID, tilgang token, etc., men når de klikker på knappen i min UI som samtaler FB.login, den modale som stiller opp for Facebook gjør ikke spør brukeren om de ønsker å gi tilgang til sin e-postadresse. Hvorfor?

For området jeg bygger, jeg trenger tilgang til brukerens Facebook-e-postadresse. Hvis de skulle bli spurt og nekte tilgang, det er en ting, men modal som dukker opp er ikke selv ber dem for å få tilgang til sin e-postadresse, og jeg kan ikke få sin e-postadresse tilbake i svaret.

Videre, hvis jeg gjør en påfølgende samtale til følgende, den emailtillatelsen kommer tilbake som declined:

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

Er det noen som vet hvorfor jeg ikke kan be brukeren for å få tilgang til sin e-postadresse? Takk.

Publisert på 14/02/2020 klokken 00:03
kilden bruker
På andre språk...                            


1 svar

stemmer
0

Takk igjen til misorude for svaret. Uten det, ville jeg aldri har funnet ut av dette. For å oppsummere alt opp, problemet var at under testing, jeg hadde tydeligvis allerede en gang avslo anmodning om å gi tilgang til min e-postadresse, og etter at det ikke lenger ba meg om tillatelse til å få tilgang til det.

Som sådan, må du passere en ekstra parameter til FB.loginfor å tvinge den til å re-be brukeren om tilgang til sin e-postadresse. Nærmere bestemt er det authTypeparameter, og her er hvordan du passerer det:

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

Det vil gi deg tilgang til e-postadressen (forutsatt at en bruker har en registrert kommer igjen, takket være misorude for å merke det), men det gjør faktisk ikke returnere e-postadresse. For å få det, du må da sende en forespørsel API til /memed en fieldsparameter som ber om e-postadresse for å få det. Jeg fant ut hvordan å få det via følgende SO svar: https://stackoverflow.com/a/31763373/1992973

Spesielt er en komplett løsning noe som følgende:

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'
});
Svarte 14/02/2020 kl. 16:45
kilden bruker

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