通过 Safari 的 iOS SSO : Can't log out/switch user any more

标签 ios facebook mobile-safari single-sign-on

Facebook 似乎已经更改了 SSO 页面,因此用户无法直接注销/切换帐户。我的意思是:

a) 您安装了任何使用 Facebook SDK 的 iOS 应用程序,例如 Voxer(不是我的应用程序),并且您没有安装了 Facebook 应用程序
b) 您通过 Safari 正常登录
c) 您再次注销并尝试切换用户,但 Safari 上显示的屏幕只允许您再次登录同一用户(确定按钮)。

可以导航到 facebook.com 并在那里注销,但这对大多数用户来说根本不直观。告诉人们安装 Facebook 应用程序也不是很人性化。

我在 developers.facebook.com 或这里都没有发现任何相关信息,我是否遗漏了什么或者我应该提交错误报告吗?

谢谢, 塞巴斯蒂安

最佳答案

我花了一天的大部分时间来解决这个问题。我发现当您使用 SSO 和调用时:

从您的代码调用:

[ Facebook 注销: self ];

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];
  }
}

facebook API 确实使访问 token 和过期日期变量无效,并尝试删除移动版 Safari cookie,但出于某种原因,可能是 Apple 的错,cookie 并未真正删除。因此,当您下次尝试登录时,您的移动 Safari 将看到该 cookie 并显示:

“您已经授权....按“确定”继续。登录为...。”

在 Facebook 找到修复程序或 Apple 修复其损坏的 API 之前,我们必须通过 Safari 绕过 SSO。以下是我为强制使用旧登录对话框而对 Facebook.m 所做的更改。如果您使用这些更改,它们可能不会永远有效,但我猜它们会持续很长时间。还要确保这适用于最新的 facebook API,我更新到这篇文章的最新版本(2011 年 11 月构建)。

从您的代码调用:

[facebook authorize:permissions];

Facebook API method:

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

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

如果这对您有帮助,请给这个话题和我的帖子评分,以帮助其他人找到它。

关于通过 Safari 的 iOS SSO : Can't log out/switch user any more,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225886/

相关文章:

ios - Unity - Steel Series Nimbus 输入

网站平台的 Facebook App Center 列表

mobile-safari - 内容安全策略在台式机上按预期工作,但在移动设备上不起作用

facebook - iframe 应用程序中的 FB.ui stream.publish 显示弹出窗口而不是 iframe 对话框

javascript - 有没有办法用 JavaScript 检测移动 Safari 音频中断(耳机拔出)?

css - iPad 网络编程的资源?

ios - Sinatra 不知道这个小曲?

ios - 使用 UIPickerView 作为具有最小和最大可能选择的 DatePicker

ios - ScrollView 问题 Swift

Facebook 'Like' 按钮中断 https/SSL