如何在app中处理api令牌过期

时间:2012-11-21 14:35:46

标签: iphone ios api rest

我们的API返回一个用户身份验证代码,该代码具有会话到期时间(30分钟不活动)。因此,如果我们使用auth令牌进行api呼叫,它会将会话更新为从通话时起30分钟。

在不活动30分钟后,api会返回一个错误,表示令牌已过期。此时我们应该请求一个新的身份验证令牌。

但是,显而易见的方法(向用户显示登录屏幕并让他们再次登录)将意味着在应用程序的某些功能中切断用户。

例如,我们有各种带有选项和输入的视图控制器,它们在流程结束时聚合并提交一个完整的API调用。如果会话在服务器上到期,而用户正在填写这些输入和视图,那么它们将在API调用时被注销,并且他们将在这些视图中失去进度。

有两种可能的解决方法:

  1. 我们在自己的应用中设置了计时器,以确保用户在应用程序停用30分钟后退出。这意味着它们不会在一组输入中被注销,但这会带来以下问题:即使我们运行自己的计时器,服务器API仍可能会过期。因此,这不起作用。

  2. 我们每隔10秒钟向服务器轮询一次,询问API身份验证令牌是否仍然有效。这会吃掉电池,数据和各种各样的东西,但这不是一种合理的做法。

  3. 有没有人有任何想法?

    由于 汤姆

1 个答案:

答案 0 :(得分:1)

根据您的描述,这听起来像是经典的失败交易问题。如果您不熟悉交易处理,“Nuts and Bolts of Transaction Processing”是该主题的入门读物。

如果您能够修改后端系统,则需要确保ACID后端。

这可能意味着在客户端上构建数据,并且在完成交易之前不会将数据发送到服务器。这样,如果会话超时,客户端仍然拥有完成事务所需的所有数据。 (利用原子性)

这可能意味着拥有一个交易令牌。在创建新会话时,客户端可以向服务器发送事务令牌,并在新会话中恢复事务的状态。 (杠杆耐久性)

对我来说,这两个选项都比擦除现有交易并强制用户重新开始更好。

希望有所帮助。