2016-07-06 4 views
10

Ich verwende den JS-Bibliotheksaufruf firebase.auth().signInWithEmailAndPassword(email, password) und bekomme ein User Objekt zurück. Das Objekt User enthält eine refreshToken.Wie kann ich das Firebase refreshToken zur erneuten Authentifizierung verwenden?

Ich verwende curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN', um Firebase aufzurufen.

Das Token wird schließlich ablaufen. Damit es so aussieht, als hätte die Anwendung (iOS und macOS) eine permanente Anmeldung, möchte ich das Token aktualisieren, wie mache ich das mit der Bibliothek REST oder JS? Ich kann keine Anrufe in der Dokumentation finden, die es mir erlauben, die refreshToken zu verwenden, um eine neue token zu bekommen.

Antwort

6

Derzeit ist die einzige Art, wie ich gefunden, dies zu tun, ist hier: https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

Sie müssen ein HTTP-Zertifikat erstellen Suche:

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

Wo YOUR_KEY in der Google developers console > API Manager > Credentials finden. Es ist unter dem API Keys Abschnitt.

Stellen Sie sicher Anfrage Körper in folgendem Format aufgebaut:.

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Wo REFRESH_TOKEN ist der Aktualisierungs-Token von Firebase Benutzerobjekt, wenn sie in signierten

Der POST Aufruf wird eine neue Rückkehr access_token.


** UPDATE ** dies auch dokumentiert ist jetzt in Firebase REST docs unter Exchange a refresh token for an ID token Abschnitt:

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

+0

Sollte diese Anfrage funktionieren, um das Token der Gmail-API zu aktualisieren? @ kgaidis – ArtStyle

+0

@ArtStyle Ich bin nicht vertraut mit Google Mail-API, also weiß ich nicht – kgaidis

+0

Dies funktioniert, aber leider nicht ausgelöst Firebase [onIdTokenChanged] (https://firebase.google.com/docs/reference/js/firebase. auth.Auth # onIdTokenChanged) Zuhörer ... Ich fühle es sollte – Luiz

5

Wenn Sie von einem Browser anrufen .getToken(true) wird automatisch aktualisiert Ihr Token. Machen Aufruf wie folgt:

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

}).catch(function(error) { 

}); 

Mehr Infos hier https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

Update:

getToken() ist veraltet, verwenden Sie stattdessen getIdToken(true)

+2

Würde nicht current auf einem frischen Start einer App NULL sein?Ich weiß nicht, wie es in einem normalen Browser ist, aber ich speichere keine Cookies oder lokale Daten. Ich speichere nur das refreshToken und alles andere, was ich speziell brauche. – kgaidis

+1

Login muss zuerst ausgeführt werden, um diesen Code zu verwenden. Wenn Sie sich mit Firebase anmelden, sollte es funktionieren. – Yevgen

+2

Dies! Aber ".getToken" ist jetzt veraltet, Sie müssen '.getIdToken' verwenden. –

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); 

Ereignis onAuth wird auf Aktualisierung der Seite aufgerufen werden, wenn der Benutzer wurde ausgeloggt authData wird Null sein, sonst nicht. Sie können Token in authdata['ie'] finden. Im Screenshot unten habe ich das Token nach auth und authdata Objekt gedruckt, wie man sieht, dass authData ['ie'] und Token ähnlich sind.

authdata.ie and token