Reactjs 检查Firebase登录是否成功React.js

Reactjs 检查Firebase登录是否成功React.js,reactjs,firebase-authentication,Reactjs,Firebase Authentication,我有一个动态渲染的应用程序。用户登录后,我想加载内容。当他们按下我的欢迎组件中的登录按钮时,我的signUpPressed函数执行: signUpPressed = () => { console.log("signUpPressed called") let email = this.state.email let password = this.state.password firebase.auth().createUserWithEmailAndPa

我有一个动态渲染的应用程序。用户登录后,我想加载内容。当他们按下我的欢迎组件中的登录按钮时,我的signUpPressed函数执行:

signUpPressed = () => {
    console.log("signUpPressed called")
    let email = this.state.email
    let password = this.state.password
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
      var errorCode = error.code
      var errorMessage = error.message
      console.log(errorCode)
      console.log(errorMessage)
    })
    var user = firebase.auth().currentUser;
    if (user) {
      console.log("user is" + user)
      this.props.handler(true)
    }
  }
但是,在我从应用程序组件调用传递给这个欢迎组件的处理程序之前,我必须按下它两次。我试着做了一个。然后。或者。最后,但没能弄明白。我的App.js代码如下所示:

class App extends Component {

  state = {
    loggedIn: false
  }

  handler = (val) => {
    this.setState({
      loggedIn: val
    })
  }

我该怎么办。

您需要使用官方文档中的以下示例中的方法检查用户:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});  
监听器本身用于检测变化;您可以根据用户对象从内部定义登录/注销行为

当没有用户时,用户将为空,因此将发生您的注销情况

当有用户时,该对象将是真实的,触发signed-in case,其上有许多属性,如user.email等——有关更多信息,请参阅文档

您可以直接在处理程序内进行检查,或者使用处理程序标记自身之外的内容,并进行检查

好吧,我想好了(如果其他人被困在这里,我会发帖)。最后,这段代码对我有效,它让我只有在确定登录成功后才能更改父组件的状态

signInPressed = () => {
    console.log("signInPressed called")
    let email = this.state.email
    let password = this.state.password
    firebase.auth().signInWithEmailAndPassword(email, password)
      .then((user) => {
        if (user != null) {
          console.log("user is signed in")
          this.props.handler(true)
        } else {
          console.log("user isn't signed in")
        }
      })
      .catch(function(error) {
        var errorCode = error.code
        var errorMessage = error.message
        console.log(errorCode)
        console.log(errorMessage)
    })
  }

一个好主意是将其包装在
AuthContext
中,这样他就可以在他的应用程序中的任何地方使用它。我也尝试过使用该代码,问题是如果我调用
this.props.handler(true)
其中
//用户登录
我会遇到关键字
this
的问题。按照我现在的方式,当用户单击“登录”时,他们已登录,但是处理程序不会调用,因为它是异步的。您可以直接在处理程序内进行检查,或者使用处理程序标记自身之外的内容,并进行检查。@jackantic没有问题。由于您是新的投稿人,请温和地提醒您单击✓ 选中我答案左边的复选标记和向上箭头,向其他用户表明这解决了你的问题,这样他们在搜索时就知道了。好吧,所以我试过了,但它不起作用。。。基本上,我想知道是否有办法在登录或注册成功后运行一些代码。有什么办法可以这样做吗?