如果令牌过期怎么办

What to do if token expired

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

在登录片段中 伪代码

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

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

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

    注意 - refresh-token 用于验证请求 user's token.

    的资源是否有效
  2. 您可以从数据库中删除用户帐户并告诉用户重新登录。

不要仅仅因为您保存了令牌就去您的 "logged in" activity,因为正如您正确注意到的那样,它可能无效。当您获得令牌时尝试使用 API 进行身份验证,并且只有在它确实有效时才转到 "logged in" activity 。否则就好像没有保存令牌一样继续(并从数据库中删除过期的令牌)。

您还应注意,当用户处于 "logged in" activity 时,令牌可能会过期。例如,用户登录、使用该应用程序,然后从最近使用屏幕转到另一个应用程序。一周后 he/she returns 打开 "logged in" activity 到您的应用程序,但与此同时令牌已过期并且无法使用。所以你还应该检查令牌是否仍然在那里工作,也许在 activity.

onStart()

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