restaurante / frontend /src /context /AuthContext.jsx
dimensionalpulsar's picture
Upload 51 files
188bf54 verified
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>
);
};