【问题标题】:What to do if token expired令牌过期怎么办
【发布时间】:2016-09-08 10:37:38
【问题描述】:

我已经使用改造与 API 进行通信。当用户登录时,我将帐户保存到数据库,当用户下次访问应用程序时,我从数据库中获取数据(所以我跳过了登录屏幕)。问题是用户的令牌何时过期。 这种情况如何处理?

在登录片段中 伪代码

user = ... //get user from database
if(user != null) {
   startActivityAccountActivity();
} 
//onButtonClick
emailLogin(); 

【问题讨论】:

    标签: android authentication token retrofit


    【解决方案1】:

    不要仅仅因为你保存了一个令牌就去你的“登录”活动,因为你已经正确地注意到它可能是无效的。获得令牌后尝试使用 API 进行身份验证,并且只有在确实有效时才进入“登录”活动。否则就像没有保存令牌一样继续(并从数据库中删除过期的令牌)。

    您还应该注意,当用户处于“登录”活动中时,令牌可能会过期。例如,用户登录,使用该应用程序,然后从“最近”屏幕转到另一个应用程序。一周后,他/她在“登录”活动打开的情况下返回您的应用程序,但与此同时令牌已过期,并且没有任何作用。因此,您还应该检查令牌是否仍然在那里工作,可能在活动的onStart() 中。

    正如 indramurari 所说,如果您控制它,您也可以在后端处理它。但请记住,它并不能解决您处理过期令牌的固有问题,刷新令牌也可能会过期,您又回到了原点。如果您使刷新令牌不过期,您可以只使登录令牌不过期。 (本段将是对他的回答的评论,但我没有足够的声誉。)

    【讨论】:

      【解决方案2】:

      这取决于您的后端安全级别。您有两种选择来处理这种情况。

      1. 在后端构建一些机制,以便您的服务器在登录 Android 设备时发送一些refresh-tokenuser's token。每当用户的令牌过期时,然后通过发送old user's tokenrefresh-token 来从Android 设备向您的服务器请求获取new user's token。你可以在未来使用new user's token。每当user's token 过期时重复此操作。

        注意 - refresh-token 用于验证请求 user's token 的资源是否是有效资源。

      2. 您可以从数据库中删除用户帐户并告诉用户重新登录。

      【讨论】:

      • 对我来说 2) 可能更好。所以onFailure 检查响应代码并导航到 loginFragment,其中包含令牌过期的 toast 信息
      • @Stepan 看起来更好:)
      猜你喜欢
      • 2021-04-29
      • 2018-09-13
      • 2019-10-16
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2016-01-14
      相关资源
      最近更新 更多