2016-09-08 100 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所說,如果你控制它,你也可以在後端處理它。但請記住,它不能解決您處理過期令牌的固有問題,刷新令牌也可能會過期,您將回到原點。如果你刷新令牌不過期,你可以讓登錄令牌不過期。 (這段話會對他的回答發表評論,但我沒有足夠的聲望。)