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/

10-09 03:22