我使用的是调用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
,我得到未定义。如果有人知道发生这种情况的原因以及为什么我不能在结果中访问特定对象,那就太好了。
对于下面的请求,变量credential
是UserCredential
对象。
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
}
文档:User
和AuthCredential
从User
的文档中可以看到,属性stsTokenManager
不存在,因为它是一个内部属性。
这意味着你不应该使用它。
当您查看fireauth.AuthUser
的源代码时,该属性实际上被称为stsTokenManager_
,如这里所定义的。它是使用user.getStsTokenManager()
访问的,就像这里定义的那样。
那么,为什么控制台将其记录为stsTokenManager
?这是因为调用了fireauth.AuthUser.prototype.toJSON()
方法,该方法调用了导出为stsTokenManager
的fireauth.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']);