为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)

Posted

技术标签:

【中文标题】为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)【英文标题】:Why does my firebase onAuthStateChanged() trigger multiple times? (React Native)为什么我的 firebase onAuthStateChanged() 触发多次? (反应原生) 【发布时间】:2018-09-27 03:10:45 【问题描述】:

我的firebase方法onAuthStateChanged()在我根据console.log使用firebase-authentication登录和注销时触发了几次。它不应该只在登录和注销时触发一次吗?结果是在退出时,多次触发到上一页的导航。代码如下:

componentDidMount() 
    fbAuth.onAuthStateChanged(user => this.loginFunc(user));


loginFunc(user) 
   if (user) 
     console.log('LOGGED IN');
else 
  console.log('LOGGED OUT');
  this.props.navigation.navigate('FbLogin');

console.log('onAUTH LOGGED IN: ', user);

这就是控制台的样子。如您所见,只需单击一次注销即可触发登录和注销。在登录时,它会触发两次......

LOGGED OUT
FbLogin.js:46 onAUTH:  null
LoggedIn.js:27 LOGGED OUT
LoggedIn.js:30 onAUTH LOGGED IN:  null
FbLogin.js:44 LOGGED OUT
FbLogin.js:46 onAUTH:  null

我的注销按钮如下所示:

<TouchableHighlight //LOGOUT
   style=
      ...
   
   onPress=() => 
      fbAuth.signOut();
      this.setState( loginState: "You are logged out" );
   
   >
      <Text>Logout</Text>
   </TouchableHighlight>

【问题讨论】:

在您的控制台消息中,似乎有两个类在编写消息:FbLogin.jsLoggedIn.js。还是我读错了? 【参考方案1】:

是的,这很正常,onAuthStateChanged 会一直触发, 我通过使用以下代码解决了这个问题:

  var authFlag = true;
  Firebase.onAuthStateChanged( user => 
    if(authFlag) 
      authFlag = false;
      if (user) 
        // Do something,
      
      else 
        // Alert.alert("Auth Error")
      
    
  );

【讨论】:

为什么即使我们没有更改身份验证,它也会继续触发?你有任何关于它的文档 在这里找到了这篇文章,它对我有用,我也觉得上面的答案更优雅。 ***.com/questions/47376453/… 这个答案需要被否决。代码不会阻止它触发,只是避免调用内部行。注销呢?

以上是关于为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)的主要内容,如果未能解决你的问题,请参考以下文章

FirebaseError:权限缺失或不足。 -类星体和火力基地

为啥我的 firebase onAuthStateChanged() 触发多次? (反应原生)

为啥我的 firebase 监听器重复记录

为啥我的 Firebase 存储 URL 没有上传到 Google Cloud Firestore?

为啥 Firebase 功能部署非常缓慢?

为啥我的应用程序在尝试登录时崩溃(firebase 登录)