【问题标题】:Handle API calls after access token expires访问令牌过期后处理 API 调用
【发布时间】:2017-11-05 11:02:34
【问题描述】:

我正在开发一个应用程序,我们将在其中介绍token expiry。令牌将在每晚在12.00 am 到期。关于如何在应用程序中处理令牌过期问题,我心中没有几个问题。

What I have done:-

每当启动应用程序时,我都会在 NSUserDefaults 中查找令牌 并检查它是否仍然有效。如果它无效,那么我打电话 令牌刷新 API 并存储新令牌。之后,每个 API 调用 使用新令牌调用。

Question in my mind:-

一位用户在 11.59 使用该应用程序,他在应用程序的主页上, 现在它的 12.01 和用户移动到应用程序的第二页,我在哪里 调用 3 个不同的 API 请求。第一个 API 请求给了我 状态码为401,所以我调用令牌刷新API。在其他 2 之间 请求也可能被调用,他们也调用了刷新令牌 API。

如何确保在收到401 后立即使所有 API 调用无效,直到我没有刷新令牌?

【问题讨论】:

  • 据我所知,您不能在调用请求后使其无效,我认为最佳做法是在发出每个请求之前检查令牌的有效性

标签: ios iphone swift api token


【解决方案1】:

不完全确定为什么令牌过期会很困难,通常令牌会在滑动比例(比如 24 小时后)而不是硬停止后过期。

在任何情况下,最简单的方法是使用一个辅助函数来获取它从 NSUserDefaults 读取的令牌,在应用程序启动时和每次 API 调用之前调用它。第一次调用验证令牌还存储过期时间,以便下次调用此函数时,您知道令牌是否应该过期,而无需再次调用服务器进行验证。这比向服务器发出大量失败的请求要好得多,因为您知道它们会失败。 这样,您的服务器上就有干净的日志,并且您可以观察不应该存在的错误。

第二部分变得不那么需要了(如果令牌在服务器上由于其他原因而不是您的 12:00 到期,或由于时差,其他错误等),也可以使用您的 GetToken 处理方法,如果您正在刷新令牌,请存储一个标志来识别此类,这样调用函数将等待或重试。

【讨论】:

  • 谢谢解答,还有一些疑惑
猜你喜欢
  • 1970-01-01
  • 2018-12-08
  • 2016-09-17
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 2016-01-14
  • 2017-12-03
相关资源
最近更新 更多