iOS SSO через Safari: больше не удается выйти из системы / переключить пользователя - PullRequest
1 голос
/ 10 февраля 2012

Facebook, похоже, изменил страницу единого входа, чтобы пользователи не могли выходить из системы / переключать учетные записи напрямую.Я имею в виду следующее:

a) у вас установлено любое приложение для iOS, использующее SDK Facebook, например Voxer (не мое приложение), и у вас нет есть приложение Facebookустановлен
b) вы обычно входите в систему через Safari
c) вы снова выходите из системы и пытаетесь переключить пользователя, но экран, отображаемый в Safari, позволяет вам снова войти в систему только того же пользователя (кнопка «ОК»).

Можно перейти на facebook.com и выйти там, но для большинства пользователей это совсем не интуитивно.Говорить людям об установке приложения Facebook тоже не очень удобно для пользователя.

Я ничего не нашел по этому поводу ни на developers.facebook.com, ни здесь, я что-то упустил или мне следует отправить сообщение об ошибке?

Спасибо, Себастьян

1 Ответ

2 голосов
/ 11 июля 2013

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

Вызывается из вашего кода:

[выход из Facebook: сам];

Метод Facebook API:

- (void)logout:(id<FBSessionDelegate>)delegate {

  self.sessionDelegate = delegate;
  [_accessToken release];
  _accessToken = nil;
  [_expirationDate release];
  _expirationDate = nil;

  NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"http://login.facebook.com"]];

  for (NSHTTPCookie* cookie in facebookCookies) {
    [cookies deleteCookie:cookie];
  }

  if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) {
    [_sessionDelegate fbDidLogout];
  }
}

API Facebook делает недействительными переменные токена доступа и даты истечения срока действия и пытается удалить cookie-файлы Safari для мобильных устройств, но по какой-то причине, вероятно, по вине Apple, cookie-файлы не были действительно удалены. Поэтому, когда вы попытаетесь войти в следующий раз, ваш мобильный Safari увидит файл cookie и выдаст:

"Вы уже авторизовались .... Нажмите" Okay ", чтобы продолжить. Вы вошли как ...."

Пока Facebook не найдет исправление или Apple не исправит их неработающий API, мы должны обходить SSO через Safari. Ниже приведены изменения, которые я внес в Facebook.m, чтобы вызвать старый диалог входа в систему. Если вы использовали эти изменения, они могут работать не вечно, но я думаю, что они будут работать очень долго. Также, чтобы убедиться, что это работает с самым последним API Facebook, который я обновил до самого последнего на этот пост (сборка ноября 2011 года).

Вызывается из вашего кода:

[facebook authorize:permissions];

Facebook API method:

- (void)authorize:(NSArray *)permissions {
  self.permissions = permissions;

//  [self authorizeWithFBAppAuth:YES safariAuth:YES];
    [self authorizeWithFBAppAuth:NO safariAuth:NO];
}

Если это поможет вам, пожалуйста, оцените эту тему и мой пост, чтобы помочь другим найти его.

...