如何观察 firebase.auth().currentUser.displayName 和其他属性的变化?

Posted

技术标签:

【中文标题】如何观察 firebase.auth().currentUser.displayName 和其他属性的变化?【英文标题】:How to observe firebase.auth().currentUser.displayName and other attributes for changes? 【发布时间】:2017-10-15 06:52:27 【问题描述】:

我正在使用 firebase 身份验证,当用户更改他们的个人资料时,例如他们的 displayNamephotoURLemail 等。onAuthStateChanged 回调不会被触发,但底层的 firebase.auth().currentUser 会得到自动更新。

我需要在用户更新他们的个人资料后更新 UI,即。我想让firebase.auth().currentUser 与客户端商店(特别是vuexredux-like 商店)保持同步。

有没有办法观察firebase.auth().currentUser 的变化,或者当firebase.auth().currentUser 变化时我可以使用任何其他挂钩来获得通知?

谢谢!

【问题讨论】:

暂时不认为这个功能存在。您应该向 Firebase 团队记录缺陷。 您可以调用该函数来更新您的用户界面。例如,当用户更改名称时,调用该函数将新名称设置为您的 ui。如果其他用户更改了他的个人资料,则使用数据库来保存数据更改并通过 ondatachange 通知 【参考方案1】:

我遇到了同样的问题,我正在使用 react 并希望看到一个从 Send verification Email 更改为 Email Verified 的组件。我所做的是创建一个在用户实例上包装reload 方法的函数。这是一个承诺,所以当承诺兑现时,我现在调用 firebase.auth().currentUser 函数,该函数现在获取重新加载的更新原因。我将所有这些与一些组件生命周期等相匹配。

const user = firebase.auth().currentUser;
user.reload().then(() => 
  const refreshUser = firebase.auth().currentUser;
  // do your stuff here
)

重新加载的文档在那里。 https://firebase.google.com/docs/reference/js/firebase.User#reload

希望能帮到你:)

【讨论】:

【参考方案2】:

Firebase 身份验证用户配置文件更改时没有任何回调。典型的模式是每次在客户端应用程序中触发身份验证侦听器时,将用户配置文件数据写入数据存储(例如实时数据库)。然后,客户可以收听每个用户的个人资料数据所在的位置,并自行对这些更改做出反应。此外,您可以使用Cloud Functions for Firebase 编写一个数据库写入触发器,该触发器可以检查写入配置文件数据时是否有任何实际更改,并根据需要采取措施。

【讨论】:

说得通,这样我们可以很好地获取用户数据/配置文件/任何更改的实时更新。 最好的方法就是忽略这些东西,在我们自己的实时数据库中设置显示名称、电子邮件、头像等并使用

以上是关于如何观察 firebase.auth().currentUser.displayName 和其他属性的变化?的主要内容,如果未能解决你的问题,请参考以下文章

将观察者传递给 redux-sagas

如何在 Firebase/Auth 上避免 UIWebView

如何从 firebase.auth().onAuthStateChanged 中提取数据

观察 Vue Observable 的变化

如何在firebase.auth(js,ts)中更新用户电话号码

如何从 Firebase.auth.currentUser Android Kotlin 获取刷新令牌