2016-07-06 54 views
10

我使用JS庫調用firebase.auth().signInWithEmailAndPassword(email, password)並取回User對象。 User對象包含一個refreshToken如何使用Firebase refreshToken重新進行驗證?

我使用curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN'來致電Firebase。

令牌最終會過期。爲了使它看起來像應用程序(iOSmacOS)具有持久登錄,我想刷新令牌,如何使用RESTJS庫來做到這一點?我無法在文檔中找到允許我使用refreshToken獲取新token的任何調用。

回答

6

目前我發現做到這一點的唯一方法是在這裏: https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

您必須重新制作HTTP任務獎勵:

POSThttps://securetoken.googleapis.com/v1/token?key=YOUR_KEY

哪裏YOUR_KEY可以在Google developers console > API Manager > Credentials找到。它位於API Keys部分。

確保請求主體的格式如下結構:

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

哪裏REFRESH_TOKEN是從火力地堡用戶對象的刷新令牌,當他們簽署

POST調用將返回一個新的access_token


** UPDATE **這現在也記錄在火力地堡REST文檔下Exchange a refresh token for an ID token部分:

https://firebase.google.com/docs/reference/rest/auth/

+0

此請求是否適用於刷新Gmail API令牌? @kgaidis – ArtStyle

+0

@ArtStyle我對Gmail API不太熟悉,所以我不知道 – kgaidis

+0

這個方法可行,但不幸的是不會觸發firebase的[onIdTokenChanged](https://firebase.google.com/docs/reference/js/firebase。 auth.Auth#onIdTokenChanged)監聽器...我覺得它應該 – Luiz

5

當你從瀏覽器撥打電話.getToken(true)會自動刷新你的令牌。撥打電話是這樣的:

firebase.auth().currentUser.getToken(/ forceRefresh/true) 
.then(function(idToken) { 

}).catch(function(error) { 

}); 
這裏

更多信息https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

更新:

getToken()現在已被棄用,改用getIdToken(true)

+2

當新應用程序啓動時,當前用戶不會爲NULL嗎?我不知道它是如何在普通瀏覽器上,但我不存儲任何cookie或本地數據。我只存儲了refreshToken和其他我特別需要的東西。 – kgaidis

+1

首先需要執行登錄才能使用該代碼。如果您使用Firebase登錄,它應該可以正常工作。 – Yevgen

+2

這個!但'.getToken'已被棄用,您必須使用'.getIdToken'。 –

0
// Create a callback which logs the current auth state 
function authDataCallback(authData) { 
    if (authData) { 
    console.log("User " + authData['uid'] + " is logged with token" + authData['ie']); 
    } else { 
    console.log("User is logged out"); 
    } 
} 
// Register the callback to be fired every time auth state changes 
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.onAuth(authDataCallback); 

事件onAuth將被要求頁面刷新,如果用戶被註銷authData將爲空,否則不會。你可以在authdata['ie']找到令牌。在下圖的截圖中,我在auth和authdata對象後打印了令牌,您如何看到authData ['ie']和令牌相似。

authdata.ie and token

相關問題