现在
updateEmail
已不再用于更新 Firebase 用户的电子邮件,如何更新用户的电子邮件?
final user = GetCurrentUser().getUser()!;
AuthCredential credential = EmailAuthProvider.credential(
email: oldEmail,
password: password,
);
final UserCredential userAuth = await user.reauthenticateWithCredential(credential);
// userAuth.user.updateEmail(newEmail); // deprecated
await userAuth.user?.verifyBeforeUpdateEmail(newEmail);
await FirebaseFirestore.instance.collection("users").doc(user.uid).update(
{
"email": newEmail,
},
);
这就是我到目前为止所得到的。它曾经因未知的魔法原因起作用,但此后就再也没有起作用。我收到一个异常,无法找到用户。其他时候,我会收到 Firestore 字段的更新(意味着代码运行时没有异常),但 Firebase 身份验证页面显示电子邮件没有任何更改。
现在不推荐使用 updateEmail 来更新 Firebase 用户的电子邮件。
确实,User#updateEmail() 函数已被弃用。
如何更新用户的电子邮件?
正如官方文档所述,更新电子邮件应使用的函数称为 User#verifyBeforeUpdateEmail() 其中:
将验证电子邮件发送到新的电子邮件地址。用户的邮箱验证通过后将会更新为新的邮箱。
你说:
它曾经因未知的神奇原因起作用,但此后就再也没有起作用。
这样的操作:
await userAuth.user?.verifyBeforeUpdateEmail(newEmail);
由于多种原因,可能会失败。在这种情况下,最好的做法是处理错误。所以我建议你这样做,否则,你永远不会知道操作何时失败,更重要的是,你永远不会知道失败的原因。
我收到无法找到用户的异常。
如果您尝试更新不存在的用户的电子邮件地址,则会抛出此类错误。