开发者问题收集

Firebase getToken()TypeError:无法读取属性

2016-06-21
29336

我试图获取我网站当前登录用户的令牌。但是,javascript 无法为我获取该值。我认为这里有 2 个问题:

  1. 当我在启动时获取 Auth.currentUser 时,我收到此错误“TypeError:无法读取 null 的属性‘getToken’”。但是当我在控制台中输入 Auth.currentUser.getToken() 时,带有令牌的对象实际上会显示出来。

  2. getToken() 返回给我的是一个承诺对象,其键“ea”包含令牌的值。但是当我执行 Auth.currentUser.getToken().ea 时,它返回“null”。我如何直接从对象中检索令牌?

谢谢!

我检索令牌的代码:

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

此屏幕截图可能有帮助: Chrome 控制台结果

2个回答

根据 firebase.User:getIdToken() 的文档:

Returns a JWT token used to identify the user to a Firebase service.

Returns the current token if it has not expired, otherwise this will refresh the token and return a new one.

该方法返回一个承诺,因为如果令牌已过期,它可能需要往返 Firebase 服务器:

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

或者在更经典的 JavaScript 中:

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

日志输出:

ey...biPA

更新 :为确保用户在获取令牌之前已登录,请在 onAuthStateChanged 监听器 :

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

以下是如何使用 NodeJS 获取 id 令牌的示例

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')
    }
})
Mike Yang
2016-12-07