FirebaseUser的.reload()方法有什么用途?
该函数在本地不会更改任何数据,并且使用Firestore.instance.currentUser()可以始终获取当前数据,不是吗?
从文档中:
因此,我最初认为在调用user.reload()之后,输出将是:“用户名:bar”,而不是“用户名:foo”。 因此,对于我来说,它似乎并没有真正执行任何操作?
相关附带问题:
这也意味着我总是必须调用FirebaseAuth.instance.currentUser()以确保必须具有用户的当前信息?没有办法拥有FirebaseUser流,当用户信息更改时,该流会发出新的FirebaseUser吗? (我不是说Firebase.instance.onAuthStateChanged())
例子:
static stackOverflowProblem() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
print("Name of User: ${user.displayName}"); //prints foo
//Renaming the name from "foo" to "bar"
UserUpdateInfo userInfo = UserUpdateInfo();
userInfo.displayName = "bar";
await _auth.updateProfile(userInfo);
print("\nBefore calling user.reload:");
print("Name of user: ${user.displayName}"); //prints foo
print("Name of FirebaseAuth.instance.currentUser: ${(await FirebaseAuth.instance.currentUser()).displayName}"); //prints bar
await user.reload();
print("\nAfter calling user.reload:");
print("Name of user: ${user.displayName}"); //prints foo
print("Name of FirebaseAuth.instance.currentUser: ${(await FirebaseAuth.instance.currentUser()).displayName}"); //prints bar
}
控制台输出:
I/flutter (19989): Name of User: Foo
I/flutter (19989):
I/flutter (19989): Before calling user.reload:
I/flutter (19989): Name of user: Foo
I/flutter (19989): Name of FirebaseAuth.instance.currentUser: bar
I/flutter (19989):
I/flutter (19989): After calling user.reload:
I/flutter (19989): Name of user: Foo
I/flutter (19989): Name of FirebaseAuth.instance.currentUser: bar
最佳答案
使您无需注销就可以验证电子邮件,然后再次登录。但是这可能是一个错误,但是当您调用user.reload()时,您必须再次调用currentUser()。
这不起作用:
await user.reload();
user.isEmailVerified => still false
你需要:
await user.reload();
user = await _auth.currentUser();
user.isEmailVerified => now it is true
关于firebase - 哪种用例在 flutter 朔迷离中具有FirebaseUser的reload()函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51709733/