48 lines
1.4 KiB
JavaScript
48 lines
1.4 KiB
JavaScript
import React, { createContext, useContext, useState, useEffect } from "react";
|
|
|
|
const AuthContext = createContext();
|
|
|
|
export const useAuth = () => {
|
|
return useContext(AuthContext);
|
|
};
|
|
|
|
export const AuthProvider = ({ children }) => {
|
|
const [isAuthenticated, setIsAuthenticated] = useState(() => {
|
|
const savedAuth = localStorage.getItem("isAuthenticated");
|
|
return savedAuth === "true";
|
|
});
|
|
|
|
const [role, setRole] = useState(() => {
|
|
const savedUser = localStorage.getItem("user");
|
|
return savedUser ? JSON.parse(savedUser).role : null;
|
|
});
|
|
|
|
const login = (userData) => {
|
|
setIsAuthenticated(true);
|
|
setRole(userData.user.role_name);
|
|
localStorage.setItem("token", userData.token);
|
|
localStorage.setItem("user", JSON.stringify(userData.user));
|
|
localStorage.setItem("role", JSON.stringify(userData.user.role_name));
|
|
localStorage.setItem("isAuthenticated", true);
|
|
};
|
|
|
|
const logout = () => {
|
|
setIsAuthenticated(false);
|
|
setRole(null);
|
|
localStorage.removeItem("token");
|
|
localStorage.removeItem("isAuthenticated");
|
|
localStorage.removeItem("user");
|
|
localStorage.removeItem("role");
|
|
};
|
|
|
|
useEffect(() => {
|
|
localStorage.setItem("isAuthenticated", isAuthenticated);
|
|
}, [isAuthenticated]);
|
|
|
|
return (
|
|
<AuthContext.Provider value={{ isAuthenticated, role, login, logout }}>
|
|
{children}
|
|
</AuthContext.Provider>
|
|
);
|
|
};
|