2016-07-13 22 views
10

我已使用「signInWithCustomToken()」驗證Firebase用戶身份。如何在Firebase 3.x.x中處理自定義Firebase令牌失效

該令牌在1小時後過期。

Firebase建議令牌過期到1小時。如果我們在使用「php-jwt」庫創建自定義令牌時修改了 屆滿日期,則firebase 會拋出異常「自定義令牌格式不正確,請檢查 文檔」。

在尋找解決方案,我發現下面的返回thread- 「Firebase Android Authentication failed: expired_token (Auth token is expired)

但刷新令牌 「onTokenRefresh()」 不爲我工作。

刷新此自定義令牌的過程是什麼?

有沒有辦法將手動過期設置爲自定義標記?

回答

-5

您可以使用此代碼

FirebaseInstanceId.getInstance().getToken(); 

FirebaseInstanceId是我的類名稱根據你改變它得到刷新令牌。

+0

真的,這是Varsha可能尋找的解決方案嗎? –

+0

我已經嘗試瞭解決方案中的「http://stackoverflow.com/questions/37505119/firebase-android-authentication-failed-expired-token-auth-token-is-expired」。但沒有爲我工作。 –

+0

@ChintanSoni在提問中提到了'onTokenRefresh()',用'FirebaseInstanceId'回答並不是完全沒有預料到的。兩者都是Firebase雲消息傳遞的概念。與Firebase身份驗證有什麼關係是一個很好的問題,但是OP必須通過提供[MCVE](http://stackoverflow.com/help/mcve)來回答這個問題。 –

10

Firebase自定義令牌生成存在限制。 Firebase自定義身份驗證令牌限制爲最高1Hr(3600秒)。

exp令牌到期的時間,以秒爲單位。它最多可以在 之後比iat晚3600秒。

如果身份驗證令牌過期每隔一小時,它讓我們很難保持有效會話的所有時間:(

當我們使用默認的認證供應商,如(谷歌,Facebook,電子郵件..);火力地堡SDK會照顧默認刷新您的身份驗證令牌,但在自定義身份驗證,火力地堡SDK需要聯繫第三方服務器,以獲取新的令牌。 這裏只SDK未能刷新令牌!

我的解決方法是,每在本地維護一個「last-token-fetch-time」信息成功令牌獲取,以便我們可以在一小時後手動刷新令牌。

你可以參考這個問題日誌獲取更多信息,

  1. https://github.com/firebase/quickstart-android/issues/31
  2. In Firebase 9.0.0 API, how to check the user has valid Auth session or not?

更新:

谷歌更新了自己的文件,

exp(過期時間):從UNIX時期開始,令牌到期的時間(以秒爲單位)。它可以比iat最多3600秒後 。 (注意:這隻能控制自定義令牌 本身到期的時間,但一旦您使用 signInWithCustomToken()簽名用戶,它們將保持登錄到設備 ,直到它們的會話失效或用戶註銷爲止。

由於document表示,自定義JWT令牌對max 1Hr有效;所以在它到期之前,請使用Firebase對您的用戶進行身份驗證。該會議之後將保持活躍狀態​​;它不會過期!

您可以使用以下方法來確保用戶具有有效會話,

public static boolean hasValidAuthToken() { 
    return FirebaseAuth.getInstance().getCurrentUser() != null ? true : false; 
} 

希望這會幫助你!

+0

絕對有幫助。 但每隔1小時手動刷新令牌可能不是最有價值的解決方案。 (每1小時服務器調用一次可能會降低應用性能。) 希望Firebase儘快提供替代方案。 –

+0

直到那麼嘗試這個解決方案,如何刷新或驗證在服務器端的令牌? _I已使用php-jwt庫._ –

+1

您可以在服務器端創建一個端點來爲每個客戶端請求發出「自定義Auth令牌」。欲瞭解更多信息,你可以參考這個文檔[如何在您的服務器上創建自定義令牌](https://firebase.google.com/docs/auth/server/create-custom-tokens) –