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
.
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:
POST
https://securetoken.googleapis.com/v1/token?key=YOUR_KEY
Où 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
Où 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
:
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
// 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.