AeThex-Connect/astro-site/src/react-app/contexts/AuthContext.jsx
MrPiglr de54903c15
new file: astro-site/src/components/auth/SupabaseLogin.jsx
new file:   astro-site/src/components/auth/SupabaseLogin.jsx
2026-02-03 09:09:36 +00:00

51 lines
1.2 KiB
JavaScript

import React, { createContext, useContext, useState, useEffect } from 'react';
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
import.meta.env.PUBLIC_SUPABASE_URL,
import.meta.env.PUBLIC_SUPABASE_ANON_KEY
);
const AuthContext = createContext();
export function useAuth() {
const context = useContext(AuthContext);
if (!context) {
throw new Error('useAuth must be used within an AuthProvider');
}
return context;
}
export function AuthProvider({ children }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const getSession = async () => {
setLoading(true);
const { data: { session } } = await supabase.auth.getSession();
if (session?.user) {
setUser(session.user);
} else {
setUser(null);
}
setLoading(false);
};
getSession();
const { data: listener } = supabase.auth.onAuthStateChange((_event, session) => {
setUser(session?.user || null);
});
return () => {
listener?.subscription.unsubscribe();
};
}, []);
const value = { user, loading, supabase };
return (
<AuthContext.Provider value={value}>
{children}
</AuthContext.Provider>
);
}