使用auth.createUserWithEmailAndPassword创建新用户并更新配置文件后,firebase auth侦听器(onAuthStateChanged)在用户对象中显示displayName,但无法访问。
上载此行为的屏幕截图以及代码。
null - displayName
displayName can be seen on expanding object
export var signup = userData => {
return async dispatch => {
try {
var { username, email, password } = userData;
var createdUser = await auth.createUserWithEmailAndPassword(
email,
password
);
//updating auth profile
await createdUser.user.updateProfile({
displayName: username,
email: email
});
//storing user info in firestore
var userObj = {
username: username,
email: email,
joinedAt: serverTimestamp()
};
await firestore
.collection("users")
.doc(`${createdUser.user.uid}`)
.set(userObj);
//setting up auth state
dispatch(
setCurrentUser({
username: username,
uid: createdUser.user.uid
})
);
} catch (error) {
console.log(error.meesage)
}
};
};
componentDidMount = () => {
auth.onAuthStateChanged((user) => {
if(user){
console.log(user)
console.log(user.uid)
console.log(user.displayName);
console.log(user.email)
}
})
};
最佳答案
调用createUserWithEmailAndPassword()
后,创建用户后,身份验证状态侦听器将立即触发。届时,用户将没有displayName属性。直到您调用updateProfile()
后,该帐户才会具有displayName。但是,对updateProfile()
的调用不会再次触发身份验证状态侦听器。相反,您应该在内存中或某些数据库中维护自己用updateProfile()
添加的名称的记录,并在以后使用该值。
传递给auth状态侦听器的用户对象将看不到displayName的新值,直到用户注销并再次登录。