Download apps/admin/src/lib/auth.tsx from safetrack/edtech: direct link, hf CLI and curl.
- Browser
- Download file 1.43 kB
-
https://huggingface.co/spaces/safetrack/edtech/resolve/main/apps/admin/src/lib/auth.tsx
- Command line
-
hf download hf://spaces/safetrack/edtech/apps/admin/src/lib/auth.tsx
-
curl -L -o auth.tsx https://huggingface.co/spaces/safetrack/edtech/resolve/main/apps/admin/src/lib/auth.tsx
1.43 kB
| import React, { useState, createContext, useContext } from 'react'; | |
| import { User } from '@repo/shared-types'; | |
| const SESSION_KEY = 'edtech_admin_token'; | |
| const USER_KEY = 'edtech_admin_user'; | |
| interface AuthContextType { | |
| token: string | null; | |
| user: User | null; | |
| login: (token: string, user: User) => void; | |
| logout: () => void; | |
| } | |
| export const AuthContext = createContext<AuthContextType>({ | |
| token: null, | |
| user: null, | |
| login: () => {}, | |
| logout: () => {} | |
| }); | |
| export function AuthProvider({ children }: { children: React.ReactNode }) { | |
| const [token, setToken] = useState<string | null>(() => sessionStorage.getItem(SESSION_KEY)); | |
| const [user, setUser] = useState<User | null>(() => { | |
| const saved = sessionStorage.getItem(USER_KEY); | |
| return saved ? JSON.parse(saved) : null; | |
| }); | |
| const login = (t: string, u: User) => { | |
| sessionStorage.setItem(SESSION_KEY, t); | |
| sessionStorage.setItem(USER_KEY, JSON.stringify(u)); | |
| setToken(t); | |
| setUser(u); | |
| }; | |
| const logout = () => { | |
| sessionStorage.removeItem(SESSION_KEY); | |
| sessionStorage.removeItem(USER_KEY); | |
| setToken(null); | |
| setUser(null); | |
| }; | |
| return ( | |
| <AuthContext.Provider value={{ token, user, login, logout }}> | |
| {children} | |
| </AuthContext.Provider> | |
| ); | |
| } | |
| export const useAuth = () => useContext(AuthContext); | |