web-dev-qa-db-fra.com

FireBase getToken () TypeError: Impossible de lire la propriété

J'essaie d'obtenir le jeton de mon utilisateur actuellement connecté de mon site Web. Cependant, javascript ne peut pas obtenir la valeur pour moi. Je pense qu'il y a 2 problèmes ici:

  1. Lorsque j'obtiens Auth.currentUser au démarrage, j'obtiens cette erreur de "TypeError: Impossible de lire la propriété 'getToken' de null". Mais lorsque je tape Auth.currentUser.getToken () dans la console, l'objet avec le jeton apparaît réellement.

  2. Ce que getToken () me renvoie est un objet de promesse avec sa clé 'ea' contenant la valeur du jeton. mais quand je fais Auth.currentUser.getToken (). ea, cela me donne "null". Comment puis-je récupérer le jeton directement à partir de l'objet?

Merci!

Mon code de récupération du token:

var Auth = firebase.auth()
var token = Auth.currentUser.getToken()

Cette capture d'écran peut être utile: Chrome console result

12
thousight

Selon la documentation de firebase.User:getIdToken() :

Renvoie un jeton JWT utilisé pour identifier l'utilisateur d'un service Firebase.

Renvoie le jeton actuel s'il n'a pas expiré, sinon cela actualisera le jeton et en renverra un nouveau.

La méthode renvoie une promesse, car elle peut nécessiter un aller-retour vers les serveurs Firebase dans le cas où le jeton a expiré:

Auth.currentUser.getIdToken().then(data => console.log(data))

Ou en JavaScript plus classique:

Auth.currentUser.getIdToken().then(function(data) {
    console.log(data)
});

Sortie du journal:

ey ... biPA

Mise à jour : pour vous assurer que l'utilisateur est connecté avant d'obtenir le jeton, exécutez le code ci-dessus dans un écouteur onAuthStateChanged :

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    user.getIdToken().then(function(data) {
      console.log(data)
    });
  }
});
29
Frank van Puffelen

Voici un exemple sur la façon d'obtenir le jeton d'identification à l'aide de NodeJS

var firebase = require('firebase')
firebase.initializeApp({
    apiKey:*********
    databaseURL:*********
})

var customToken = *********    
firebase.auth().signInWithCustomToken(customToken).catch(function(error) {
    var errorMessage = error.message
    console.log(errorMessage)
})

firebase.auth().onAuthStateChanged(function(user) {
    if (user) {
        firebase.auth().currentUser.getToken().then(data => console.log(data))
    } else {
        console.log('onAuthStateChanged else')
    }
})
2
Yang