diff --git a/src/common/contexts/User/UserContext.jsx b/src/common/contexts/User/UserContext.jsx
new file mode 100644
index 0000000..ee02a8a
--- /dev/null
+++ b/src/common/contexts/User/UserContext.jsx
@@ -0,0 +1,46 @@
+import {createContext, useEffect, useState} from "react";
+import Login from "@/states/Login";
+import Loading from "@/states/Loading";
+import {sessionRequest} from "@/common/utils/RequestUtil.js";
+
+export const UserContext = createContext({});
+
+export const UserProvider = (props) => {
+ const [user, setUser] = useState({loggedIn: false});
+ const [loading, setLoading] = useState(true);
+ const [sessionToken, setSessionToken] = useState(localStorage.getItem("sessionToken") || null);
+
+ const updateUser = async (token) => {
+ if (!token && !sessionToken) {
+ setUser({loggedIn: false});
+ return setLoading(false);
+ }
+
+ try {
+ setUser({loggedIn: true, ...await sessionRequest("/user/me", "GET", token || sessionToken)});
+ setLoading(false);
+ } catch (e) {
+ setLoading(false);
+ setUser({loggedIn: false});
+ }
+ }
+
+ useEffect(() => {
+ setTimeout(updateUser, 1000);
+ }, []);
+
+ const updateSessionToken = (token) => {
+ localStorage.setItem("sessionToken", token);
+ setSessionToken(token);
+ updateUser(token);
+ }
+
+ if (loading) return ();
+
+ return (
+
+ {!loading && !user.loggedIn && }
+ {!loading && user.loggedIn && props.children}
+
+ );
+}
\ No newline at end of file