Один из наиболее важных этапов запуска диалога входа — это выбор данных, к которым приложение должно иметь доступ. Во всех примерах использовался параметр scope
, с помощью которого запрашивается доступ к данным человека. Такие права доступа называются разрешениями.
Они подробно описаны в нашем руководстве по разрешениям. При работе с разрешениями и диалогом входа необходимо помнить следующее:
email
, его необходимо отправить на проверку в Facebook. Подробнее см. в документации по проверке входа и в руководстве по проверке.При входе через Facebook мы не рекомендуем одновременно запрашивать разрешения на чтение и публикацию. Ваше приложение может запросить дополнительные разрешения позднее, уже после входа пользователя. Для этого вам достаточно открыть диалог входа с запросом нового разрешения.
Предположим, у вас есть кнопка "Вход" со следующими разрешениями:
<fb:login-button scope="public_profile" onlogin="checkLoginState();"> </fb:login-button>
Если вы проверите с помощью /me/permissions
, какие разрешения вам предоставил пользователь, то увидите следующее:
{"data": [ { "permission":"public_profile", "status":"granted" } ] }
Если позднее вы захотите добавить разрешение email
, перезапустите его, используя функцию FB.login()
:
FB.login(function(response) { console.log(response); }, {scope: 'email'});
(Эту функцию необходимо вызвать из обработчика событий кнопки. В противном случае браузер может заблокировать всплывающее уведомление диалога.)
Обратите внимание, что в нем запрашивается только новое разрешение. Если новое разрешение принято, проверка /me/permissions
даст следующий результат:
{"data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"email", "status":"granted" } ] }
Обратите внимание, что в список предоставленных разрешений добавлено новое разрешение email
.
Вход через Facebook позволяет людям отказаться от предоставления определенных разрешений. Если бы пользователь в этом примере снял флажок user_likes
(отметки "Нравится"), результат проверки /me/permissions
на предмет предоставленных разрешений был бы следующим:
{ "data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"user_likes", "status":"declined" } ] }
Обратите внимание, что разрешение user_likes
было не предоставлено, а отклонено.
Если вам отказали в предоставлении разрешений, их можно запросить повторно. Подготовьте экран с пояснением, зачем вам нужно это разрешение, и запросите его повторно. Однако если вы воспользуетесь методом, описанным в предыдущем разделе, диалог входа не будет запрашивать это разрешение.
Дело в том, что в случае отказа предоставить разрешение диалог входа не будет запрашивать его повторно, если только вы явным образом не настроите в нем повторный запрос отклоненного разрешения.
Добавьте в вызов FB.login()
флажок auth_type: rerequest
:
FB.login( function(response) { console.log(response); }, { scope: 'user_likes', auth_type: 'rerequest' } );
После этого диалог входа будет заново запрашивать отклоненное разрешение. Диалог будет выглядеть практически так же, как и при повторном запросе разрешений, с той разницей, что будет запрошено отклоненное разрешение.