【问题标题】:swift: auto logout after certain timeswift:一定时间后自动注销
【发布时间】:2020-02-20 21:11:14
【问题描述】:

我正在开发一个通过 .net api 连接到服务器的应用程序。

登录的用户会生成一个访问令牌,用于进行网络调用。

要求:在生成该访问令牌 20 分钟后, 令牌过期,用户必须再次登录才能继续使用 应用程序。

我怎样才能实现这个功能,20分钟后用户将从应用程序中注销并重定向到主页。

如果用户在登录 20 分钟后仍在使用应用程序?如何在应用程序中保存访问令牌并在用户注销后将其删除。

我已经在 Objective c 中看到了几个答案,但我希望尽快得到答案。

【问题讨论】:

  • 您在一篇文章中提出了太多问题。 1.如何在应用使用20分钟后退出用户? 2. 如何在后台注销5分钟app的用户? 3. 在哪里存储/删除访问令牌? 4、如何将obj-c代码翻译成swift?
  • 每个帖子限制为 1 个问题。
  • 一个简单的答案是从服务器管理令牌。在执行下一步之前,请务必检查令牌是否过期。并将您的令牌存储在 userDefaults 中。
  • 我已经编辑了我的答案,以更具体地了解我现在主要关心的问题
  • @SidharthKhanna 如何检查我的应用中的令牌是否过期?

标签: ios swift access-token logout user-inactivity


【解决方案1】:

将您的访问令牌保存到钥匙串中,并为其添加时间戳。

编写一个从钥匙串中获取 API 令牌的函数。每次这个函数访问访问令牌时,它应该检查它的时间戳是否超过 20 分钟它应该返回 nil,然后你应该把用户带到主屏幕。

【讨论】:

  • 但是如果用户在屏幕上并且没有发生网络呼叫,我怎么知道 20 分钟已经过去,因为我必须在 20 分钟过去后自动注销用户。这就是要求。我可以设置一个计时器之类的东西来知道 20 分钟已经过去了吗?
  • @FazeelaIqbal,当然。您仍然需要保留时间戳。当应用程序在后台停留太久时,计时器将被取消。所以当你回到前台时,如果时间已经过去,你需要丢弃访问令牌。
【解决方案2】:

欢迎堆栈溢出

简答

在应用程序委托中创建一个计时器以跟踪令牌到期。并在需要时重置计时器。

长答案 TLDR;

要实现您所解释的功能,我们需要

  • 仅在应用委托中跟踪访问令牌到期。

  • 当用户从 AppDelegate 登录时启动一个 20 分钟的计时器。

  • 在进行任何 API 调用之前,从应用委托访问令牌(在内部,您可以保存在任何安全方法中,例如 KeyChain),
  • 从应用程序委托访问令牌时,检查计时器是否已过期。如果是这样,请在窗口中显示您的登录屏幕。
  • 如果不存在,则进行 API 调用并让用户执行任务。

这种方法的优点

如果您确定访问令牌将在 20 分钟内过期,那么我们可以在不进行任何 API 调用的情况下从应用程序中注销用户。

【讨论】:

  • 感谢您的回答。所以如果我设置计时器,即使应用程序在后台运行,它也会跟踪时间吗?对不起我的愚蠢问题。我是 iOS 开发新手,了解不多
  • 如果您的应用程序在后台,它将在内存中可用一段时间,之后您的计时器将被释放。如果用户从应用切换器关闭应用,计时器会自行释放该时刻。要处理这种情况,请在您从服务器获取访问令牌的时间保存 Date 对象,并在下次启动时检查该值
  • No 不应该依赖于计时器。而是使用令牌保存日期和时间,然后将当前日期和时间与保存的日期和时间进行比较
  • @SidharthKhanna 如果我们需要实时,我们需要使用计时器。这样用户会在 20 分钟后自动进入登录屏幕
  • 如果我尝试使用过期令牌进行网络调用,api 会生成 401 未经授权的错误。我可以只使用这个错误来注销用户吗?这是一个好方法吗?
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多