Files
CityCards-Website/src/context/AuthContext.tsx
2026-04-13 16:12:05 +05:30

57 lines
1.5 KiB
TypeScript

import React, { createContext, useContext, useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom';
interface User {
email: string;
name: string;
accessToken:string;
userId:string;
}
interface AuthContextType {
user: User | null;
login: (userData: User) => void;
logout: () => void
}
const AuthContext = createContext<AuthContextType | null>(null)
export const AuthProvider = ({ children }: { children: React.ReactNode }) => {
const [user, setUser] = useState<User | null>(null)
const navigate = useNavigate()
useEffect(() => {
const storedUser = localStorage.getItem("user")
if (storedUser) {
setUser(JSON.parse(storedUser))
}
}, [])
const login = (userData: User) => {
setUser(userData)
localStorage.setItem("user", JSON.stringify(userData))
localStorage.setItem("accessToken", userData?.accessToken)
localStorage.setItem("userId", userData?.userId)
}
const logout = () => {
setUser(null)
localStorage.removeItem("user")
localStorage.removeItem("accessToken")
localStorage.removeItem("userId")
navigate("/")
}
return (
<AuthContext.Provider value={{ user, login, logout }}>
{children}
</AuthContext.Provider>
)
}
export const useAuth = () => {
const ctx = useContext(AuthContext)
if (!ctx) throw new Error("useAuth must be used inside AuthProvider")
return ctx
}