无法从 createUserWithEmailAndPassword 的 firebase 响应访问 stsTokenManager

Moh*_*her 2 firebase react-native firebase-authentication

我正在使用 React Native 注册表单,它调用firbase.auth().createUserWithEmailAndPassword(email, password); 我在 trycatch 中使用的代码,如下所示:

const result = await firebase
      .auth()
      .createUserWithEmailAndPassword(email, password);

    console.log(result.user.stsTokenManager);
Run Code Online (Sandbox Code Playgroud)

如果我控制台日志,result.user我会看到一个 stsTokenManager 对象,其中包含有关所提供令牌的信息,但如果我尝试控制台日志,result.user.stsTokenManager我会得到未定义的信息。如果有人知道发生这种情况的原因以及为什么我无法访问结果中的特定对象,那就太好了。

sam*_*man 7

对于以下请求,变量credential是一个UserCredential对象。

const credential = await firebase
  .auth()
  .createUserWithEmailAndPassword(email, password);
Run Code Online (Sandbox Code Playgroud)

AUserCredential由以下部分组成:

const credential = await firebase
  .auth()
  .createUserWithEmailAndPassword(email, password);
Run Code Online (Sandbox Code Playgroud)

文档:UserAuthCredential

正如您从 的 文档中看到的User,该属性stsTokenManager不存在,因为它是内部属性。

这意味着您不应该使用它。

当您查看 的源代码时fireauth.AuthUser,实际上会调用该属性stsTokenManager_,如此处所定义可使用此处user.getStsTokenManager()定义的 来访问它。

那么,为什么控制台将其记录为stsTokenManager?这是因为该fireauth.AuthUser.prototype.toJSON()方法被调用,该方法调用fireauth.AuthUser.prototype.toPlainObject()导出为 的方法,如此stsTokenManager处定义。

因此,您应该能够使用以下任一方式记录访问令牌:

console.log(result.user.getStsTokenManager().accessToken);

console.log(result.user.toPlainObject().stsTokenManager.accessToken);
Run Code Online (Sandbox Code Playgroud)