web-dev-qa-db-fra.com

Comment utiliser le jeton d'actualisation Firebase pour s'authentifier?

J'utilise l'appel de bibliothèque JS firebase.auth().signInWithEmailAndPassword(email, password) et récupère un objet User. L'objet User contient un refreshToken .

J'utilise curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN' pour passer des appels vers Firebase. 

Le jeton finira par expirer. Pour que l'application (iOS et macOS) ait un identifiant de connexion persistant, je souhaite actualiser le jeton. Comment puis-je utiliser une bibliothèque REST ou JS? Je ne trouve aucun appel dans la documentation qui me permette d'utiliser la variable refreshToken pour obtenir une nouvelle variable token.

25
kgaidis

Actuellement, le seul moyen que j'ai trouvé de faire cela est ici: https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

Vous devez faire une requête HTTP:

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

YOUR_KEY se trouve dans console des développeurs Google> Gestionnaire d'API> Informations d'identification . C'est dans la section API Keys.

Assurez-vous que le corps de la demande est structuré dans le format suivant:

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

REFRESH_TOKEN est le jeton d'actualisation de l'objet utilisateur Firebase lors de la connexion.

Vous devez définir l'en-tête Content-Type: application/x-www-form-urlencoded sinon vous obtiendrez des erreurs (par exemple, "MISSING_GRANT_TYPE").

L'appel POST renverra un nouveau access_token.


** UPDATE ** ceci est également maintenant documenté dans les documents Firebase REST de la section Exchange a refresh token for an ID token:

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

14
kgaidis

Lorsque vous passez un appel depuis un navigateur, .getIdToken(true) actualisera automatiquement votre jeton. Faire un appel comme ça:

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

}).catch(function(error) {

});

Plus d'infos ici https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

18
Yevgen
// 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);

L'événement onAuth sera appelé lors de l'actualisation de la page. Si l'utilisateur a été déconnecté, authData sera nul, sinon. Vous pouvez trouver un jeton dans authdata['ie']. Dans la capture d'écran ci-dessous, j'ai imprimé le jeton après les objets authdata et authdata. Vous verrez comment authData ["ie"] et le jeton sont similaires.

 authdata.ie and token

0
Nikita