#reactjs #firebase #react-native #firebase-authentication
#reactjs #firebase #react-native #firebase-аутентификация
Вопрос:
Я пытаюсь получить статус авторизации после обновления приложения и предыдущего входа в систему, но firebase.auth().onAuthStateChanged()
выдает undefined. Причиной этого является либо переход к главному экрану, либо к экрану входа, используя статус авторизации.
import React, {Component} from 'react';
import {View} from 'react-native';
import firebase from 'firebase';
import {connect} from 'react-redux';
import {Spinner} from '../components/common';
class Switch extends Component {
componentDidMount() {
const userData = this.checkUser();
this.switchContent(userData);
}
checkUser = () => {
firebase.auth().onAuthStateChanged(async (userData) => {
return userData;
});
};
switchContent(userData) {
console.log(userData);
if (userData) {
return this.props.persistantSignIn();
}
return this.props.navigation.push('SignInForm');
}
renderComponent() {
return (
<View style={{flex: 1}}>
<Spinner />
</View>
}
render() {
return <View style={{flex:1}}>{this.renderComponent()}</View>;
}
}
export default connect(null, {persistantSignIn})(Switch);
Ответ №1:
Результаты onAuthStateChanged
(т.е. userData
) должны обрабатываться в анонимной функции. Также обратите внимание, что до тех пор, пока пользователь не войдет в систему, userData
будет null
.
componentDidMount() {
firebase.auth().onAuthStateChanged( (userData) => {
this.switchContent(userData);
});
}
Нет необходимости переносить firebase.auth().onAuthStateChanged
внутри анонимной функции, если, например, вы не должны были использовать useEffect
, например, следующее:
import { useEffect } from 'react';
...
useEffect(() => {
auth.onAuthStateChanged( userData => {
this.switchContent(userData);
})
},[])