gpt4 book ai didi

firebase - Flutter - firebase_auth updateProfile 方法不起作用

转载 作者:IT老高 更新时间:2023-10-28 12:40:50 26 4
gpt4 key购买 nike

我正在使用 Flutter 和 Firebase 创建应用。我有一些奇怪的问题。我正在创建身份验证,它工作正常,但是当我尝试将一些集合添加到我的 Firestore 数据库时,displayName 的记录设置为 null。

Future<FirebaseUser> createUser(email, password, displayName) async {
final FirebaseUser user = await _auth.createUserWithEmailAndPassword(
email: email, password: password);

UserUpdateInfo info = new UserUpdateInfo();
info.displayName = displayName;
_auth.updateProfile(info);

Firestore.instance.collection('users').document().setData({
'name': user.displayName,
'uid': user.uid,
'email': user.email,
'isEmailVerified': user.isEmailVerified,
'photoUrl': user.photoUrl,
});

return user;
}

这是创建用户的 Future 类。

void _handleSubmitted() {
userAuth
.createUser(
emailController.text, passwordController.text, nameController.text)
.then((onValue) {
print("Sign Up button clicked: $onValue");

});
}

这个方法是点击注册按钮时的句柄。

集合看起来像这张照片。

collection

最佳答案

如果我没记错的话,当您调用 updateDisplayNameupdatePhotoURL 时,本地用户配置文件不会立即更新。这意味着您应该将本地值写入数据库(最简单)或强制重新加载配置文件(最安全)。

写入局部值

如前所述,这是最简单的方法:

FirebaseFirestore.instance.collection('users').doc().set({
'name': displayName,
'uid': user.uid,
'email': user.email,
'isEmailVerified': user.emailVerified, // will also be false
'photoUrl': user.photoURL, // will always be null
});

请注意,emailVerified 将始终为 false,并且 photoUrl 在新创建的电子邮件+密码帐户上将始终为 null

强制重新加载配置文件

您可以通过调用 FirebaseUser.reload() 来强制重新加载用户数据。 :

await _auth.currentUser!.updateDisplayName(displayName);
await _auth.currentUser!.updateEmail(newEmail);
await _auth.currentUser!.updatePhotoURL(photoURL);
await _auth.currentUser!.reload();

user = _auth.currentUser;

关于firebase - Flutter - firebase_auth updateProfile 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50986191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com