2016-09-08 96 views
0

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

在登录片段

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

回答

0

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

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

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

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

+0

对我来说2)也许会更好。因此,'onFailure'检查响应代码并导航到loginFragment,其中令牌过期的烤面包信息 – Stepan

+0

@Stepan看起来更好:) – Nikhil

0

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

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

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