无法从 createUserWithEmailAndPassword 的 firebase 响应访问 stsTokenManager



我使用的是调用firbase.auth().createUserWithEmailAndPassword(email, password);的react原生注册表单我在trycatch中使用的代码如下:

const result = await firebase
.auth()
.createUserWithEmailAndPassword(email, password);
console.log(result.user.stsTokenManager);

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

对于下面的请求,变量credentialUserCredential对象。

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

UserCredential是由:

{
additionalUserInfo?: null | {
isNewUser: boolean;
profile: Object | null;
providerId: string;
username?: string | null
};
credential: AuthCredential | null;
operationType?: string | null;
user: User | null
}

文档:UserAuthCredential

User的文档中可以看到,属性stsTokenManager不存在,因为它是一个内部属性。

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

当您查看fireauth.AuthUser的源代码时,该属性实际上被称为stsTokenManager_,如这里所定义的。它是使用user.getStsTokenManager()访问的,就像这里定义的那样。

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

因此,您应该能够使用以下任意一种方式记录访问令牌:
console.log(result.user.getStsTokenManager().accessToken);
console.log(result.user.toPlainObject().stsTokenManager.accessToken);

我通过将响应转换为JSON来解决这个问题

result.user.toJSON().stsTokenManager.accessToken

我想说非常简单,但这就是我如何解决它,无论firestore是否不将其作为公共属性或方法暴露。

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

console.log(result.user['stsTokenManager']);

相关内容

  • 没有找到相关文章

最新更新