Soy un desarrollador junior, así que sean fáciles conmigo.
Mi objetivo es autenticar a un usuario de forma anónima cuando abre la página de inicio, luego, si todo salió bien, obtiene los datos de la base de datos en tiempo real, ¡pero solo si la coincidencia de uid está bien!
He ahí mis reglas:
{ "rules": { "$uid": { ".read": "auth != null && auth.uid == $uid", ".write": "false", } } }Mi base de datos está estructurada así https://ibb.co/jkRBCsF
El inicio de sesión anónimo está en el contexto.
export const AuthContextProvider = ({ children }: Props) => { React.useEffect(() => { signInAnonymously(auth) .then(() => { // Signed in.. }) .catch((error) => { const errorCode = error.code; const errorMessage = error.message; // ... }); }, []); const values = {}; return <AuthContext.Provider value={values}>{children}</AuthContext.Provider>; };Luego, cuando abro una página, por ejemplo, '/crew', getStaticProps inicia fetchPlanetInfo
export const getStaticProps: GetStaticProps = async () => { const planetInfo = await fetchPlanetsInfo("destinations"); return { props: { data: planetInfo, }, }; }; export function fetchPlanetsInfo(query: string) { let dataArr: any = []; try { onAuthStateChanged(auth, (user) => { if (user) { const uid = user.uid; const databaseCall = ref(db, uid + "/" + query); onValue(databaseCall, (snapshot) => { const data = snapshot.val(); dataArr.push(data); }); } else { console.log("user is signout"); // User is signed out // ... } }); } catch (error) { console.log(error); } return dataArr.flat(); }Intenté averiguar dónde está el error pero no encontré la solución.
Mi problema es que los datos no se obtienen de la base de datos. fetchPlanetsInfo devuelve nulo. Creo que mis reglas están mal escritas.