2012-11-21 42 views
1

我们的API返回会话失效(30分钟不活动)的用户授权码。因此,如果我们使用身份验证令牌进行api呼叫,它会将会话从通话时间更新为30分钟。如何处理app中的API令牌失效

经过30分钟的非活动状态后,api返回一个错误,表明令牌已过期。此时我们应该请求一个新的身份验证令牌。

但是,这样做的显而易见的方式(向用户显示登录屏幕并让他们再次登录)将意味着在应用程序中的某些功能中断用户。例如,我们有各种视图控制器,其中包含选项和输入,它们在流程结束时聚合并提交一个完整的API调用。如果会话在服务器上到期,而用户正在填写这些输入和视图,则在进行API调用时它们将被注销,并且它们将在这些视图中失去进展。

这有两个可能的变通:

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

  2. 我们每隔10秒左右轮询服务器以询问API授权令牌是否仍然有效。这会消耗电池,数据和各种各样,只是不是一个合理的方式来做这样的事情。

有没有人有任何想法?

感谢 汤姆

+0

从API发送“您已注销”消息有什么意义?为什么不在密钥过期后尝试拨打新电话时将用户登录?非常像cookies在浏览器 – ale0xB

+0

中的工作原理是这样的...问题是因为他们可能在注销之前完成加载。即使他们正在使用该应用,身份验证令牌也可能会过期。 –

回答

1

从你的描述,这听起来像一个典型的失败的事务问题。以防万一您不熟悉事务处理,“Nuts and Bolts of Transaction Processing”是该主题的入门书。

如果您有能力修改后端系统,您将需要确保一个ACID后端。

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

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

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

希望有所帮助。