Firebase身份验证提供程序抖动

jchrr9hc  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(149)

我目前正在用Firebase开发一个Futter应用程序,我很纠结,因为无论用户何时登录或退出,状态认证通知程序都会触发并按预期工作,但它不会通知用户验证电子邮件、更改显示名或更改电子邮件等更改,甚至不会通知用户将匿名帐户转换为电子邮件帐户。
通知程序代码为:

final FirebaseAuth _firebaseAuth;
Stream<User?> get authStateChanges => _firebaseAuth.authStateChanges();

以及

final firebaseUser = context.watch<User?>();
mzsu5hc0

mzsu5hc01#

authStateChanges只通知用户的登录状态,如登录或注销,而不通知您提到的User配置文件的更改。不过,您可以使用userChanges()方法监听任何用户更新的更改:
通知任何用户更新的更改。
这是authStateChanges和idTokenChanges的超集。它提供有关所有用户更改的事件,例如链接和取消链接凭据时以及更新用户配置文件时。此流的用途是侦听用户状态(已登录、已注销、不同用户和令牌刷新)的实时更新,而不必手动调用reload,然后再重新生成对应用程序的更改。
但是,它不会通知电子邮件验证。正如文档中所述,事件会在以下情况发生时触发:

  • 就在侦听器注册之后。
  • 用户登录时。
  • 当前用户注销时。
  • 当前用户的令牌发生更改时。
  • 调用FirebaseAuth.instance.currentUser提供的以下方法时:
  • reload()
  • unlink()
  • updateEmail()
  • updatePassword()
  • updatePhoneNumber()
  • updateProfile()

此外,如果您通过自己的firebase admin sdk实现更新User配置文件,userChanges()将不会触发
您可以使用以下FirebaseAuth.instance.currentUser.reload()强制重新加载以检索最新的User配置文件。

相关问题