Почему Facebook Войти модальный не побуждая пользователей для доступа к адресу электронной почты?

голоса
0

Я пытаюсь интегрировать поток входа в Facebook на веб-сайт, и у меня возникают проблемы с попыток заставить вход модальный запрашивают доступ к Facebook адреса электронной почте пользователя.

В частности, я, выполняя следующий код из моих JS:

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

Ответ возвращается как связанные , когда пользователь успешно входит в систему , и я получаю ИД пользователя, маркер доступа и т.д., но при нажатии на кнопку в моем UI , что вызовы FB.login, модальной , который всплывает на Facebook делает не спрашивать пользователя , если они хотят , чтобы предоставить доступ к их электронному адресу. Почему?

Для сайта, я в здании, мне нужен доступ к Facebook адрес электронной почты пользователя. Если бы они должны были быть заданы и запретить доступ, это одна вещь, но модальный, что всплывает даже не спрашивая их для доступа к адресу электронной почты, и я не получаю свой адрес электронной почты обратно в ответ.

Кроме того, если я последующий вызов к следующему, то emailразрешение возвращается как declined:

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

Кто-нибудь знает, почему я не могу подсказать пользователю для доступа к адресу электронной почты? Благодарю.

Задан 14/02/2020 в 00:03
источник пользователем
На других языках...                            


1 ответов

голоса
0

Еще раз спасибо misorude за ответ. Без этого, я никогда бы не понял это. Если все резюмировать, проблема заключалась в том, что во время тестирования, я, видимо, уже однажды отклонил запрос о предоставлении доступа к моему адресу электронной почты, и после этого он больше не просил у меня разрешения на доступ к нему.

Таким образом , вы должны пройти дополнительный параметр для FB.loginтого , чтобы заставить его повторно запрашивать у пользователя для доступа к адресу электронной почты. В частности, это authTypeпараметр, и вот как вы передаете его:

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

Это даст вам доступ к адресу электронной почты (при условии , пользователь имеет один зарегистрированный, опять же , благодаря misorude для отметив , что), но это на самом деле не возвращает адрес электронной почты. Чтобы получить это, то вы должны отправить запрос API , чтобы /meс fieldsпараметром запрашивающего адрес электронной почты , чтобы получить его. Я понял, как получить , что с помощью следующей SO ответ: https://stackoverflow.com/a/31763373/1992973

В частности, полное решение что-то вроде следующего:

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'
});
Ответил 14/02/2020 в 16:45
источник пользователем

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