auto-commit for df4b0748-985b-4592-8c48-1e56102f3613

This commit is contained in:
emergent-agent-e1
2026-04-29 14:49:07 +00:00
parent 7673090279
commit 356aa13063
30 changed files with 2809 additions and 244 deletions
+56
View File
@@ -0,0 +1,56 @@
import { createContext, useContext, useEffect, useState, useCallback } from "react";
import api from "./api";
const AuthCtx = createContext(null);
export const AuthProvider = ({ children }) => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const refresh = useCallback(async () => {
const token = localStorage.getItem("kino_token");
if (!token) {
setUser(null);
setLoading(false);
return;
}
try {
const { data } = await api.get("/auth/me");
setUser(data);
} catch {
localStorage.removeItem("kino_token");
setUser(null);
} finally {
setLoading(false);
}
}, []);
useEffect(() => { refresh(); }, [refresh]);
const login = async (email, password) => {
const { data } = await api.post("/auth/login", { email, password });
localStorage.setItem("kino_token", data.access_token);
setUser(data.user);
return data.user;
};
const register = async (email, password, name) => {
const { data } = await api.post("/auth/register", { email, password, name });
localStorage.setItem("kino_token", data.access_token);
setUser(data.user);
return data.user;
};
const logout = () => {
localStorage.removeItem("kino_token");
setUser(null);
};
return (
<AuthCtx.Provider value={{ user, loading, login, register, logout, refresh }}>
{children}
</AuthCtx.Provider>
);
};
export const useAuth = () => useContext(AuthCtx);