2016-07-06 47 views
10

Uso la chiamata alla libreria JS firebase.auth().signInWithEmailAndPassword(email, password) e restituisco un oggetto User. L'oggetto User contiene un refreshToken.Come utilizzare Firebase refreshToken per autenticare nuovamente?

Io uso curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN' per effettuare chiamate a Firebase.

Il token alla fine scadrà. Per far sembrare che l'applicazione (iOS e macOS) abbia un accesso persistente, voglio aggiornare il token, come faccio a utilizzare la libreria REST o JS? Non riesco a trovare alcuna chiamata nella documentazione che mi permetta di usare lo refreshToken per ottenere un nuovo .

risposta

6

Attualmente l'unico modo che ho trovato per farlo è qui: https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

È necessario creare un codice HTTP quest:

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

Dove YOUR_KEY può essere trovato nel Google developers console > API Manager > Credentials. È sotto la sezione API Keys.

Assicurarsi corpo della richiesta è strutturato nel seguente formato:.

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Dove REFRESH_TOKEN è il token di aggiornamento da oggetto utente Firebase quando hanno firmato in

La chiamata POST restituirà una nuova access_token.


** UPDATE ** questo è anche ora documentato nei documenti Firebase riposo sotto Exchange a refresh token for an ID token sezione:

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

+0

Qualora questa richiesta di lavoro per l'aggiornamento di Gmail API gettone? @kgaidis – ArtStyle

+0

@ArtStyle non ho familiarità con Gmail API, in modo da non so – kgaidis

+0

Questo funziona, ma purtroppo non si innesca di Firebase [onIdTokenChanged] (https://firebase.google.com/docs/reference/js/firebase. auth.Auth # onIdTokenChanged) ascoltatore ... ritengo che dovrebbe – Luiz

5

Quando si effettua una chiamata da un browser .getToken(true) si aggiorna automaticamente il token. Effettuare chiamate in questo modo:

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

}).catch(function(error) { 

}); 

Maggiori informazioni qui https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

Aggiornamento:

getToken() è deprecato ora, utilizzare invece getIdToken(true)

+2

Non sarebbe currentUser essere NULL su un lancio fresco di un app?Non so come sia su un normale browser, ma non memorizzo alcun cookie o dati locali. Conservo solo il refreshToken e qualsiasi altra cosa di cui ho specificamente bisogno. – kgaidis

+1

Il login deve essere eseguito prima di usare quel codice. Se si utilizza l'accesso con Firebase dovrebbe funzionare. – Yevgen

+2

Questo! Ma '.getToken' è deprecato ora, è necessario utilizzare' .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); 

Evento onAuth saranno chiamati a pagina di aggiornamento, se l'utente è stato disconnesso authData sarà nullo, altrimenti no. Puoi trovare il token in authdata['ie']. Nello screenshot qui sotto ho stampato il token dopo auth e authdata object, come puoi vedere authData ['ie'] e token sono simili.

authdata.ie and token

Problemi correlati