Estoy tratando de obtener el usuario actual en la consola pero no estoy definido en react-native. base de fuego 8.3 es. este es mi inicio de base de fuego
import firebase from "firebase"; // import { initializeApp } from "firebase/app"; const firebaseConfig = { //api }; // Initialize Firebase const app = firebase.initializeApp(firebaseConfig); export default firebase;este es el código de acción, que es lo mismo que los documentos en Internet
firebase .firestore() .collection("user") .doc(firebase.auth().currentUser.uid) .get() .then((snapshot) => { if (snapshot.exists) { console.log(snapshot.data()); dispatch({ type: USER_STATE_CHANGE, currentUser: snapshot.data() }); } else { console.log("does not exist, console from action "); }y aquí está mi código de tienda redux, que es más dudoso en mi conocimiento
const store = createStore(Reducers, applyMiddleware(thunk)) return ( <Provider style={styles.center} store={store}> <Main/> </Provider> );y principal.js
function Main(props) { useEffect(() => { props.fetchUser(); }, []); if (props.currentUser == undefined) { return ( <View> <Text>No Data</Text> </View> ); } else { return ( <View> <Text>{props.currentUser.name} is logged in now !</Text> </View> ); } } const mapStateToProps = (state) => { return { currentUser: state.user.currentUser, }; }; const mapDispatchToProps = (dispatch) => { return { fetchUser: () => dispatch(fetchUser()), }; }; export default connect(mapStateToProps, mapDispatchToProps)(Main);Mi conjetura (es difícil estar seguro de los fragmentos de código que compartió) es que el código que carga los datos de usuario de Firestore se ejecuta cuando se carga la página/aplicación, y que Firebase no ha terminado de restaurar al usuario actual cuando se ejecuta .
Cuando se carga la página o la aplicación, Firebase restaura automáticamente las credenciales de usuario del almacenamiento local. Sin embargo, esto requiere que llame al servidor (entre otros para ver si la cuenta ha sido deshabilitada), lo que puede llevar algunas veces. Mientras se lleva a cabo esta llamada, su código principal continúa y el valor de firebase.auth().currentUser es null en este punto.
Por lo tanto, si no sincroniza su código que carga el perfil de usuario con las acciones de restauración de Firebase, terminará cargando los datos demasiado pronto, cuando el usuario aún no haya vuelto a iniciar sesión.
La solución es escuchar los cambios de estado de autenticación y responder a ellos, en lugar de asumir que firebase.auth().currentUser siempre es correcto. Para ver un ejemplo de cómo hacer esto, consulte el primer fragmento de código en la documentación de Firebase sobre cómo obtener el usuario actual :
firebase.auth().onAuthStateChanged((user) => { if (user) { // User is signed in, see docs for a list of available properties // https://firebase.google.com/docs/reference/js/firebase.User var uid = user.uid; // 🤞 This is where you can load the user profile from Firestore // ... } else { // User is signed out // ... } });