Firebase и React Native: onAuthStateChanged не запускается - PullRequest
0 голосов
/ 13 апреля 2020

Итак, я разрабатываю свое самое первое нативное приложение React с Firebase, и в моем коде есть следующая структура:

ComponentDidMount(){
    this.verifySession();
    console.log("Component did mount");
}

verifySession = () =>{
    console.log("inside VS");
    firebase.auth().onAuthStateChanged(user =>{
        if(user){
            this.props.navigation.navigate('Dashboard');
            console.log("dashboard");
        }else{
            this.props.navigation.navigate('Login');
            console.log("Login");
        }
    });
}

Проблема в том, что моя функция verifySession не запускается. На самом деле я не получаю никаких журналов, поэтому я думаю, что ComponentDidMount также не выполняется. Этот код находится в моем компоненте LoadingScreen.

Вот мое приложение. js, где я инициализирую конфигурацию Firebase:

import * as firebase from 'firebase';
import {firebaseConfig} from './data/config';


const Stack = createStackNavigator();
firebase.initializeApp(firebaseConfig);

Я также попробовал следующее для моего экрана загрузки:

import Dashboard from './dashboard';
import Login from './login';

render(){
    firebase.auth().onAuthStateChanged(function(user){
        if(user){
            return (<Dashboard/>);
        }else{
            return (<Login/>);
        }  
    });

    return(
        <View>
            <Text>Verifying session...</Text>
        </View>
    )
}

Логин должен быть обработан, но вместо этого он показывает «Проверяющий сеанс», что заставляет меня думать, что оператор if вообще не выполняется.

Любые мысли / рекомендации по этому вопросу будут оценены.

1 Ответ

0 голосов
/ 13 апреля 2020

onAuthStateChanged предназначен для добавления наблюдателя, а не для прямого вызова. Может быть, он не запускается, потому что статус пользователя для входа вообще не меняется, и вы никого не пытаетесь войти в систему, так что нет ничего, что могло бы вызвать его. Попробуйте реализовать auth().createUserWithEmailAndPassword(email, password) или `auth (). SignInWithEmailAndPassword (электронная почта, пароль) 'и протестировать создание / вход пользователя.

Эта статья также может быть полезна; он помещает наблюдателя аутентификации в отдельный компонент и позволяет вам перемещаться между двумя стеками навигации в зависимости от состояния входа пользователя: https://heartbeat.fritz.ai/how-to-manage-authentication-flows-in-react-native-with-react-navigation-v5-and-firebase-860f57ae20d3

...