【问题标题】:How do I simulate an expired access token in iOS Facebook SDK 3.1?如何在 iOS Facebook SDK 3.1 中模拟过期的访问令牌?
【发布时间】:2012-09-28 17:44:11
【问题描述】:

我想测试 Facebook 用户的访问令牌已过期并且我需要更新令牌的代码路径。我注意到访问令牌在创建 2 个月后过期。我不想等待 2 个月来测试该代码路径,所以我想要一种模拟这种到期的方法。如果我从未针对以下谜题测试这种情况,我担心我的代码会崩溃:

  1. 目前,在应用程序启动时,我致电[FBSession openActiveSessionWithReadPermissions:permArray allowLoginUI:NO completionHandler:someFunction] 以静默方式重新连接过去已连接的 Facebook 用户。注意 allowLoginUI 是如何的。是否必须为 YES 才能允许用户重新登录并更新令牌,还是可以静默更新令牌?
  2. 每次会话状态更改时都会触发任何 openActiveSession* 调用的完成处理程序。两个值得注意的状态是FBSessionStateOpenFBSessionStateOpenTokenExtended。当令牌变为扩展时,状态机是保持令牌扩展状态,还是会进入扩展状态,然后立即进入打开状态?我需要知道状态转换,所以我不会运行我的处理程序两次。
  3. [FBSession activeSession].accessToken 会变为 nil 还是保留为旧的过期令牌?
  4. [FBSession activeSession].expirationDate 类似:它是 nil,旧的到期日期,还是自动成为新的到期日期?

【问题讨论】:

  • 这是一个非常复杂的过程,除非你使用他们的 FBLoginView...绝对是 Facebook 糟糕的 API 设计的标志。

标签: ios facebook


【解决方案1】:

要使令牌过期,最简单的方法是在您的计算机上登录 FB,进入应用中心,点击“我的应用”,然后通过点击您应用旁边的小 X 来删除您的应用。这将导致令牌“过期”。一旦发生这种情况,您将无法在没有用户交互的情况下自动更新令牌。您必须重新打开身份验证 UI,并且用户必须单击“允许”

关于您的问题:

  1. allowLoginUI 必须为 YES。如果令牌过期,用户必须 在您获得新令牌并设置它之前与 UI 交互 到 NO 将让它静默失败。

  2. 我相信 TokenExtended 状态只会在扩展当前活动的令牌时发生。如果用户在 2 个月期限结束之前使用您的应用程序,FB SDK 将定期自动为您扩展令牌。但是,这与更新过期令牌不同。不过,这不是 100% 确定的,因为我还没有测试过这种状态。

  3. 如果您的令牌过期,当您下次启动应用程序时,您应该在您的 AppDelegate 方法之一 (didFinishLaunching) 中调用 openActiveSession,这将触发状态为 Closed 或 LoginFailed 的完成处理程序。此时,您应该调用 [FBSession.activeSession closeAndClearTokenInformation];根据他们的教程,清除您的访问令牌。
  4. 同#3

【讨论】:

  • 从您的帐户设置中删除应用程序真的与过期令牌相同吗?删除该应用程序将撤销您已授予该应用程序的权限。当应用仍然具有权限但令牌创建已过去 2 个月时,会发生更新令牌。
  • 我对从您的 Facebook 帐户设置中删除该应用进行了一些测试。 1)访问令牌仍然存在(不是零)。 2) 到期日在未来还有 2 个月。 3) FBSession::isOpen 仍然返回 YES。 FB的SDK似乎搞砸了。确定您的应用程序是否已从用户帐户中删除的唯一方法是执行 Graph API 调用并使其失败。即使你将allowLoginUI设置为YES,它也不会弹出登录提示,因为FB的状态机认为你仍然被授权。
  • 您是否在每次应用启动时都调用 openSession?这个调用应该是对 FB 的调用,如果访问令牌无效(过期或其他),那么完成处理程序应该返回断开状态并清除访问令牌。
  • 嗯好的,所以 openSession 调用不会返回错误状态。我误解了。在这种情况下,您需要再次调用 FB 的 openGraph 才能确定令牌无效,这是正确的。
猜你喜欢
  • 2012-10-09
  • 2012-09-18
  • 2014-07-31
  • 1970-01-01
  • 2016-01-14
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
相关资源
最近更新 更多