【问题标题】:Firebase user's details change listener in JavascriptFirebase 用户的详细信息在 Javascript 中更改侦听器
【发布时间】:2020-12-05 14:20:53
【问题描述】:

因此,如果用户登录您的应用,您可以通过

进行检查
firebase.auth().onAuthStateChanged((user)=>{});

但是如果用户已经登录并且他的用户有一个属性改变,你怎么看?

在我的情况下,我让用户验证他的电子邮件地址,完成后,他应该能够在验证他的电子邮件后立即在他的应用程序上看到更改。所以我使用的是 react native,它几乎是带有 ES6 语法的 javascript,我正在做一个 firebase.auth().onAuthStateChanged(); 但它不起作用,我什至在屏幕上有一个按钮来检查是否像这样验证:

if (!firebase.auth().currentUser.emailVerified) { firebase.auth().currentUser.sendEmailVerification(); }
else if (firebase.auth().currentUser.emailVerified) { this.setState({ showVerifier: false }); }

但即使这样也不起作用,好像firebase.auth().currentUser 不会在电子邮件经过验证后更新,这里可以做什么?

【问题讨论】:

    标签: javascript reactjs firebase react-native firebase-authentication


    【解决方案1】:

    如果您使用react-native-firebase(强烈推荐,因为它支持最新的firebase功能),您可以按照this doc中的说明监听用户更改

    来自文档

    添加一个监听器来观察用户对象的变化。这是auth#onAuthStateChangedauth#onIdTokenChanged 和用户更改的所有内容的超集。此方法的目标是更轻松地监听所有用户更改,例如链接和取消链接凭据时,而无需手动调用 User#reload

    onUserChanged(listener: AuthListenerCallback): () => void;
    

    【讨论】:

    • react-native-firebase 是 firebase 的包装器,对吧?因此,如果实际 firebase 的侦听器没有更新电子邮件验证,react-native-firebase 侦听器会捕捉到它吗?没有意义
    • 是的,但正如文档中所述,它不仅仅是firebaseonAuthStateChanged 方法的包装器。你用的是哪个库?您是否尝试过实现上述方法?
    【解决方案2】:

    据我了解你的问题,我想给你一个想法。
    我认为onAuthStateChanged() 仅在您的身份验证状态更改(登录、注销)时触发,而不是在用户属性更改时触发。
    正如他们在documentation 中提到的,

    为用户登录状态的变化添加一个观察者。之前 4.0.0,这在用户登录、退出,或者用户的ID token在token等情况下发生变化时触发了observer 到期或密码更改。 4.0.0之后,只触发观察者 登录或退出时。

    function isVerified(){
       var user = firebase.auth().currentUser;
       if(user != null){
           var status = user.emailVerified;
           if(status)
           {
              // Verified
           }else{
              // Not Verified
           }
       }
       else{
           // User didn't login!
       } 
    }
    

    因此,您必须通过定义上述函数来手动检查它,并且您可以在用户单击按钮时调用此函数

    【讨论】:

    • 它不起作用,现有用户的状态没有改变。即使在调用firebase.auth().currentUser 之后,它的 user.emailVerified 也不会改变。我在我的问题中做了同样的事情,你只是使用 vars 以更扩展的方式编写它,我试过了,它是同样的事情,但它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多