如何处理API令牌过期

问题描述 投票:0回答:1

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

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

但是,执行此操作的明显方法(向用户显示登录屏幕并让他们再次登录)意味着在应用程序中的某些功能中间切断用户。

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

有两种可能的解决方法:

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

  2. 我们每隔 10 秒左右向服务器轮询一次,询问 API 身份验证令牌是否仍然有效。这会消耗电池、数据和各种资源,这不是做这样的事情的合理方法。

有人有什么想法吗?

ios rest token
1个回答
1
投票

从您的描述来看,这听起来像是一个典型的交易失败问题。以防万一您不熟悉事务处理,“事务处理的具体细节”是该主题的入门读物。

如果您有能力修改后端系统,您将希望确保后端是 ACID 的。

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

这可能意味着拥有交易代币。创建新会话时,客户端可以向服务器发送事务令牌,并且事务的状态将在新会话中恢复。 (利用耐用性)

对我来说,这两个选项都比清除现有事务并强迫用户重新开始更好。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.