Android 如果令牌过期怎么办

Android 如果令牌过期怎么办,android,authentication,token,retrofit,Android,Authentication,Token,Retrofit,我已经使用改型与API进行了通信。当用户登录时,我将帐户保存到数据库,当用户下次转到应用程序时,我从数据库获取数据(所以我跳过了登录屏幕)。问题是当用户的令牌过期时。 如何处理这种情况 在登录片段中 伪码 user = ... //get user from database if(user != null) { startActivityAccountActivity(); } //onButtonClick emailLogin(); 这取决于您的后端安全级别。你有两种选择来处理

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

在登录片段中 伪码

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

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

  • 在后端建立一些机制,以便服务器在登录Android设备时发送一些
    刷新令牌
    以及
    用户令牌
    。每当用户的令牌过期时,通过发送
    旧用户令牌
    以及
    刷新令牌
    ,从Android设备向服务器请求获取
    新用户令牌
    。您可以在将来使用新用户的令牌。每当
    用户令牌过期时重复此操作

    注意-
    刷新令牌
    用于验证请求用户令牌的资源是否有效

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


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

  • 在后端建立一些机制,以便服务器在登录Android设备时发送一些
    刷新令牌
    以及
    用户令牌
    。每当用户的令牌过期时,通过发送
    旧用户令牌
    以及
    刷新令牌
    ,从Android设备向服务器请求获取
    新用户令牌
    。您可以在将来使用新用户的令牌。每当
    用户令牌过期时重复此操作

    注意-
    刷新令牌
    用于验证请求用户令牌的资源是否有效

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

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

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

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

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

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


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

    对我来说2)可能更好。因此,
    onFailure
    检查响应代码并导航到loginFragment,其中包含toast信息,该令牌expired@Stepan看起来更好:)对我来说可能更好。因此,
    onFailure
    检查响应代码并导航到loginFragment,其中包含toast信息,该令牌expired@Stepan看起来好多了:)