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

tho*_*ght 12 javascript firebase firebase-authentication

我正在尝试获取我当前登录的网站用户的令牌.但是,javascript无法为我获得价值.我认为这里有两个问题:

  1. 当我在启动时收到Auth.currentUser时,我收到"TypeError:无法读取属性'getToken'为null"的错误.但是当我在控制台中键入Auth.currentUser.getToken()时,带有令牌的对象实际显示出来.

  2. getToken()返回给我的是一个promise对象,其键'ea'包含令牌的值.但是当我做Auth.currentUser.getToken()时,它会让我'空'.如何直接从对象中检索令牌?

谢谢!

我检索令牌的代码:

var Auth = firebase.auth()
var token = Auth.currentUser.getToken()
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*len 31

根据以下文件firebase.User:getIdToken():

返回用于向Firebase服务标识用户的JWT令牌.

如果当前令牌尚未过期,则返回当前令牌,否则将刷新令牌并返回新令牌.

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

Auth.currentUser.getIdToken().then(data => console.log(data))
Run Code Online (Sandbox Code Playgroud)

或者更经典的JavaScript:

Auth.currentUser.getIdToken().then(function(data) {
    console.log(data)
});
Run Code Online (Sandbox Code Playgroud)

日志输出:

安永... BIPA

更新:要确保用户在获取令牌之前已登录,请在onAuthStateChanged侦听器中运行以上代码:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    user.getIdToken().then(function(data) {
      console.log(data)
    });
  }
});
Run Code Online (Sandbox Code Playgroud)