如何在iOS Facebook SDK 3.1中模拟过期的访问令牌?

Pwn*_*ner 11 facebook ios

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

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

sti*_*108 5

要使令牌过期,最简单的方法是登录计算机上的FB,转到App Center,单击"我的应用程序",然后单击应用旁边的小X来删除您的应用.这将导致令牌变为"过期".一旦发生这种情况,您无法在没有用户交互的情况下自动续订令牌.您必须重新打开身份验证UI,用户必须单击"允许"

关于你的问题:

  1. allowLoginUI必须为YES.如果令牌过期,则用户必须先与UI进行交互才能获得新令牌,并将其设置为"否"将使其无声地失败.

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

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

  • 从您的帐户设置中删除应用程序是否与过期令牌完全相同?删除应用会撤消您已经提供给应用的权限.当应用程序仍具有权限但是自创建令牌以来已经过去2个月,就会更新令牌. (3认同)
  • 我做了一些关于从Facebook帐户设置中删除应用程序的测试.1)访问令牌仍在那里(不是零).2)到期日期仍为2个月.3)`FBSession :: isOpen`仍然返回YES.FB的SDK似乎搞砸了.找出您的应用是否已从用户帐户中删除的唯一方法是执行Graph API调用并使其失败.即使你将`allowLoginUI`设置为YES,它也不会弹出登录提示,因为FB的状态机认为你仍然被授权. (3认同)