Spaces:
Running
Running
| import React, { createContext, useContext, useEffect, useState } from 'react'; | |
| import { auth, db } from '../firebase/config'; | |
| import { onAuthStateChanged, signInWithEmailAndPassword, signOut } from 'firebase/auth'; | |
| import { ref, get } from 'firebase/database'; | |
| export const AuthContext = createContext(); | |
| export const useAuth = () => { | |
| return useContext(AuthContext); | |
| }; | |
| export const AuthProvider = ({ children }) => { | |
| const [currentUser, setCurrentUser] = useState(null); | |
| const [userRole, setUserRole] = useState(null); | |
| const [loading, setLoading] = useState(true); | |
| const login = async (email, password) => { | |
| return signInWithEmailAndPassword(auth, email, password); | |
| }; | |
| const logout = () => { | |
| return signOut(auth); | |
| }; | |
| useEffect(() => { | |
| const unsubscribe = onAuthStateChanged(auth, async (user) => { | |
| if (user) { | |
| setCurrentUser(user); | |
| // Obtener rol del usuario desde DB | |
| try { | |
| const userRef = ref(db, `users/${user.uid}`); | |
| const snapshot = await get(userRef); | |
| if (snapshot.exists()) { | |
| setUserRole(snapshot.val().role); | |
| } else { | |
| console.log("Rol no definido para este usuario = asume default"); | |
| setUserRole('comensal'); | |
| } | |
| } catch (error) { | |
| console.error("Error al obtener el rol del usuario", error); | |
| } | |
| } else { | |
| setCurrentUser(null); | |
| setUserRole(null); | |
| } | |
| setLoading(false); | |
| }); | |
| return unsubscribe; | |
| }, []); | |
| const value = { | |
| currentUser, | |
| userRole, | |
| login, | |
| logout | |
| }; | |
| return ( | |
| <AuthContext.Provider value={value}> | |
| {!loading && children} | |
| </AuthContext.Provider> | |
| ); | |
| }; | |