我在以下情况下遇到麻烦:
我正在Firebase身份验证中使用电子邮件登录功能。一切正常。但是,作为注册表格的一部分,有一个用户名字段。提交表单后,将执行以下操作:
const response = await auth.createUserWithEmailAndPassword(email, password);
await response.user?.updateProfile({
displayName: name
});
这正在使用显示名称正确更新用户配置文件。问题是createUserWithEmailAndPassword
完成后,它立即触发onAuthStateChanged
,这是在应用的本地状态下控制用户的唯一位置。但是,一旦触发了回调,显示名称仍然是未知的,这将导致注册后应用程序的第一个渲染不知道用户名。如果页面刷新,则会显示该名称,因为它一直存在。
我本人可以将用户数据持久保存在状态中,但这正在失去使用自动订阅的某些好处。
你们有没有解决这个问题的更好的方法?
谢谢!
Edit:我还在auth中找到了一个名为updateCurrentUser
的方法,并且我尝试在更新配置文件完成后调用它。但是,这并未触发文档中所述的onAuthStateChanged
。
我认为您可以尝试此操作
firebase.auth().createUserWithEmailAndPassword(email, password).then(function(user) {
var user = firebase.auth().currentUser;
user.updateProfile({
displayName: name
});
}