如果令牌过期该怎么办

时间:2016-09-08 10:37:39

标签: android authentication token retrofit

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

登录片段中的

伪代码

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

2 个答案:

答案 0 :(得分:1)

这取决于您的后端安全级别。您有两种方法可以处理这种情况。

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

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

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

答案 1 :(得分:1)

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

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

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