我正在使用 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");
});
}
这个方法是点击注册按钮时的句柄。
集合看起来像这张照片。
最佳答案
如果我没记错的话,当您调用 updateDisplayName
或 updatePhotoURL
时,本地用户配置文件不会立即更新。这意味着您应该将本地值写入数据库(最简单)或强制重新加载配置文件(最安全)。
如前所述,这是最简单的方法:
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/