Почему модальное имя входа в Facebook не запрашивает у пользователей доступ к их адресу электронной почты? - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь интегрировать поток входа в Facebook в веб-сайт (согласно этой странице: https://developers.facebook.com/docs/facebook-login/web), и у меня возникают проблемы с попыткой заставить модал входа запрашивать доступ к адрес электронной почты пользователя Facebook.

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

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

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

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

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

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

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

Редактировать : Стоит упомянуть, что я тестирую это на локальном хосте, и мне интересно, дает ли это эффект. На панели инструментов Facebook для разработчиков я установил виртуальный хост localhost (например, site-name.test) в качестве разрешенного URL-адреса для перенаправлений, и он позволил мне войти в систему с помощью Facebook и получить идентификатор пользователя, например, c., Но он просто никогда не запрашивает у пользователя доступ к его адресу электронной почты. Спасибо.

1 Ответ

0 голосов
/ 14 февраля 2020

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

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

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

Это даст вам доступ к адресу электронной почты (при условии, что у пользователя есть зарегистрированный адрес; опять же, из-за неправильного указания на то, что ), но фактически не возвращает адрес электронной почты. Для этого вам необходимо отправить запрос API на /me с параметром fields, запрашивающий адрес электронной почты для его получения. Я выяснил, как получить это с помощью следующего ответа SO: { ссылка }

В частности, полное решение выглядит примерно так:

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'
});
...