diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/contexts/Auth.context.tsx | 29 | ||||
| -rw-r--r-- | src/lib/contexts/Global.context.tsx | 2 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/lib/contexts/Auth.context.tsx b/src/lib/contexts/Auth.context.tsx index d93ca92..29e2005 100644 --- a/src/lib/contexts/Auth.context.tsx +++ b/src/lib/contexts/Auth.context.tsx @@ -1,5 +1,6 @@ 'use client'; -import React, { createContext, use, useState, useContext } from 'react'; +import React, { createContext, useState, useContext, useEffect } from 'react'; + type User = { id: number; username: string; @@ -8,15 +9,36 @@ type User = { interface AuthContextType { user: User | null; setUser: (user: User | null) => void; + logout: () => void; } -const AuthContext = createContext<AuthContext | null>(null); +const AuthContext = createContext<AuthContextType | null>(null); export const AuthContextProvider = ({ children }: React.PropsWithChildren) => { const [user, setUser] = useState<User | null>(null); + useEffect(() => { + const token = localStorage.getItem('token'); + if (!token) return; + + fetch('http://localhost:8000/api/me', { + headers: { Authorization: `Bearer ${token}` }, + }) + .then((res) => { + if (!res.ok) throw new Error('Not authenticated'); + return res.json(); + }) + .then((userData) => setUser(userData)) + .catch(() => setUser(null)); + }, []); + + const logout = () => { + localStorage.removeItem('token'); + setUser(null); + }; + return ( - <AuthContext.Provider value={{ user, setUser }}> + <AuthContext.Provider value={{ user, setUser, logout }}> {children} </AuthContext.Provider> ); @@ -32,3 +54,4 @@ export const useAuthContext = () => { }; export const useUser = () => useAuthContext().user; +export const useLogout = () => useAuthContext().logout; diff --git a/src/lib/contexts/Global.context.tsx b/src/lib/contexts/Global.context.tsx index 3f8b61b..c903456 100644 --- a/src/lib/contexts/Global.context.tsx +++ b/src/lib/contexts/Global.context.tsx @@ -1,3 +1,5 @@ +import react from 'react'; +import { authcontextprovider } from './auth.context'; import React from 'react'; import { AuthContextProvider } from './Auth.context'; |
