Я интегрирую интеграцию FacebookSDK 4.x с пользовательским интерфейсом и используя следующий метод для входа в систему, а также получение электронной почты от пользователя.
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error){
NSLog(@"%@",[error localizedDescription]);
}
else if (result.isCancelled){
NSLog(@"Cancled");
}
else
{
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"Granted all permission");
if ([FBSDKAccessToken currentAccessToken])
{
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
{
if (!error)
{
NSLog(@"%@",result);
}
}];
}
}
else
{
NSLog(@"Not granted");
}
}
}];
Это отлично работает, если пользователь не отказывается от доступа к "электронной почте". Я вижу в документах FacebookSDK, что я могу повторно запросить доступ к электронной почте пользователя один раз. Согласно документам FB: как указано в этой ссылке
If someone has declined a permission for your app, the login dialog won't let your app re-request the permission unless you pass auth_type=rerequest along with your request.
Включение повторной аутентификации
Во время выбранного вами потока входа мы показали вам, как использовать Вход Диалог и OAuth для аутентификации и разрешения запросов от их. Для повторной аутентификации вы можете использовать эти же шаги с дополнительными параметры, чтобы заставить его:
auth_type: этот параметр указывает запрашиваемую аутентификацию (как список, разделенный запятыми). Возможные варианты: https - проверяет наличие безопасного сеанса Facebook и запрашивает повторную аутентификацию, если он отсутствует reauthenticate - запрашивает у человека повторную аутентификацию безоговорочно
auth_nonce: includes an app generated alphanumeric nonce which can be used to provide replay protection. See how to check an auth_nonce
для более.
Вот пример использования JavaScript SDK, который запускает повторная аутентификация с использованием параметра auth_type reauthenticate:
FB.login(function (response) { // Исходный код FB.login}, {auth_type: 'reauthenticate'})
Обратите внимание, что тело ответа содержит параметр auth_type вы указали, например:
access_token = USER_ACCESS_TOKEN & истекает = SECONDS_UNTIL_TOKEN_EXPIRES & auth_type = повторной аутентификации
Как передать "auth_type = rerequest" на серверы Facebook через SDK iOS? Есть ли специальный метод для этого?