2016-07-06 11 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)が永続的なログインを持っているようにするには、トークンをリフレッシュしたいのですが、RESTまたはJSライブラリを使用してどのようにすればいいですか?私はrefreshTokenを使用して新しいtokenを取得することを可能にするドキュメントの呼び出しを見つけることができません。

答えて

6

を使用します。 https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

HTTPリセクエスト:YOUR_KEYGoogle developers console > API Manager > Credentialsで見つけることができます

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

。それはAPI Keysセクションの下にあります。

リクエストボディは、次の形式で構成されていることを確認します。彼らはサインインしたときにREFRESH_TOKENがFirebaseユーザーオブジェクトからリフレッシュトークンです

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

POSTコールは、新しいを返します。 access_tokenonAuthがユーザーならば、ページ更新に呼び出されます

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

はCurrentUserには、アプリの新鮮な起動時にNULLではないでしょうか?私はそれが普通のブラウザでどのようになっているのかわかりませんが、私はクッキーやローカルデータを保存しません。私は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); 

イベント:


** UPDATE **これも今Exchange a refresh token for an ID tokenセクションの下Firebase RESTのドキュメントに記載されていますログアウトされたauthDataはnullになります。トークンはauthdata['ie']にあります。以下のスクリーンショットでは、authとauthdataオブジェクトの後にトークンを印刷しました。authData ['ie']とトークンがどのように見えるかは、似ています。

authdata.ie and token

関連する問題