Mi función de cerrar sesión de usuario no parece funcionar en absoluto. Lo estoy llamando desde una alerta en el inicio de sesión, pero no parece llamarlo. Si trato de agregar "()" al final, me da un error.

loginUser = (email, password) => {
      try {
        firebase.auth().signInWithEmailAndPassword(email, password).then(function (user){
          console.log(user)
          console.log('we are logged in boys')
          Alert.alert(
            'Signed In',
            'You have signed in. Well done!',
            [
              {text: 'Sign Out', onPress: () => this.signOutUser},
            ],
            { cancelable: false }
          )
        })
      }
      catch(error) {
        console.log(error.toString())
      }
    }

    signOutUser = () => {
      console.log('Do we reach this or not')
      firebase.auth().signOut().then(function (user){
        // Sign-out successful.
        console.log('We are signing out!')
      }).catch(function(error) {
        // An error happened.
        console.log('There is an issue!')
      });
    }
1
Man James 10 sep. 2018 a las 02:32

4 respuestas

La mejor respuesta

La devolución de llamada this dentro de signInWithEmailAndPassword no es lo que esperaba. cambie la función de devolución de llamada a función de flecha, me gusta

firebase.auth().signInWithEmailAndPassword(email, password).then((user) => {
  ...
});

Además, cambie la asignación en la función Press como

{text: 'Sign Out', onPress: this.signOutUser}

¡Espero que esto ayude!

0
Prasun 10 sep. 2018 a las 07:05

Actualiza tu función así

loginUser = (email, password) => {
      try {
        firebase.auth().signInWithEmailAndPassword(email, password).then((user)=> {
          console.log(user)
          console.log('we are logged in boys')
          Alert.alert(
            'Signed In',
            'You have signed in. Well done!',
            [
              {text: 'Sign Out', onPress: () => this.signOutUser},
            ],
            { cancelable: false }
          )
        })
      }
      catch(error) {
        console.log(error.toString())
      }
    }

La función dentro de then () debe ser una función de puntero para que pueda acceder al contexto this

0
Wolverine 10 sep. 2018 a las 06:45

Prueba esto:

{text: 'Sign Out', onPress: () => { this.signOutUser(); } }
0
Reza Bayat 10 sep. 2018 a las 03:12

Actualice su función con la función de flecha:

loginUser = (email, password) => {
      try {
        firebase.auth().signInWithEmailAndPassword(email, password).then((user)=> {
          console.log(user)
          console.log('we are logged in boys')
          Alert.alert(
            'Signed In',
            'You have signed in. Well done!',
            [
              {text: 'Sign Out', onPress: () => this.signOutUser()},//Or Write  this.signOutUser direct without arrow function
            ],
            { cancelable: false }
          )
        })
      }
      catch(error) {
        console.log(error.toString())
      }
    }

Espero que esto sea útil.

1
Iva 10 sep. 2018 a las 06:59