通过Safari进行iOS SSO:无法再注销/切换用户

时间:2012-02-10 09:55:22

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

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

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

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

我在developers.facebook.com上或者在这里找不到任何相关内容,我错过了什么或者我应该提交错误报告吗?

谢谢, 塞巴斯蒂安

1 个答案:

答案 0 :(得分:2)

我花了一天的时间来处理这个问题。我发现当你使用SSO和电话时:

从您的代码中调用:

[facebook logout: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确实使访问令牌和expirationdate变量无效并尝试删除移动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];
}

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