Firebase和React Native:onAuthStateChanged不会被触发

问题描述 投票:0回答:1

所以我正在用Firebase开发我的第一个React本机应用程序,并且我的代码具有以下结构:

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组件中。

这是我的app.js,在其中初始化Firebase conf:

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


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

我也在我的LoadingScreen中尝试了以下操作:

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>
    )
}

登录应该被渲染,但是它显示“ Verify session”,这让我认为if语句根本没有被执行。

关于此事的任何想法/建议将不胜感激。

firebase react-native firebase-authentication react-navigation
1个回答
0
投票

onAuthStateChanged是要添加一个观察者,而不是直接调用。可能是因为用户的登录状态根本没有改变并且您没有尝试登录任何人而没有触发,所以没有任何触发它的可能。尝试实现auth().createUserWithEmailAndPassword(email, password)或`auth()。signInWithEmailAndPassword(电子邮件,密码)'并测试用户创建/登录。

本文也可能有用;它将auth观察者放在单独的组件中,并允许您基于用户的登录状态在两个导航堆栈之间进行导航:https://heartbeat.fritz.ai/how-to-manage-authentication-flows-in-react-native-with-react-navigation-v5-and-firebase-860f57ae20d3

© www.soinside.com 2019 - 2024. All rights reserved.