如何观察 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 身份验证,当用户更改他们的个人资料时,例如他们的 displayName
、photoURL
或 email
等。onAuthStateChanged
回调不会被触发,但底层的 firebase.auth().currentUser
会得到自动更新。
我需要在用户更新他们的个人资料后更新 UI,即。我想让firebase.auth().currentUser
与客户端商店(特别是vuex
或redux
-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 和其他属性的变化?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase/Auth 上避免 UIWebView
如何从 firebase.auth().onAuthStateChanged 中提取数据