| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import { useEffect, useState } from 'react';
- import { User, Session } from '@supabase/supabase-js';
- import { supabase } from '@/integrations/supabase/client';
- export function useAuth() {
- const [user, setUser] = useState<User | null>(null);
- const [session, setSession] = useState<Session | null>(null);
- const [loading, setLoading] = useState(true);
- useEffect(() => {
- let isMounted = true;
-
- // Set up auth state listener
- const { data: { subscription } } = supabase.auth.onAuthStateChange(
- (event, session) => {
- if (isMounted) {
- setSession(session);
- setUser(session?.user ?? null);
- setLoading(false);
- }
- }
- );
- // Check for existing session
- supabase.auth.getSession().then(({ data: { session } }) => {
- if (isMounted) {
- setSession(session);
- setUser(session?.user ?? null);
- setLoading(false);
- }
- });
- return () => {
- isMounted = false;
- subscription.unsubscribe();
- };
- }, []);
- const signIn = async (email: string, password: string) => {
- const { error } = await supabase.auth.signInWithPassword({
- email,
- password,
- });
- return { error };
- };
- const signUp = async (email: string, password: string) => {
- const redirectUrl = `${window.location.origin}/`;
-
- const { error } = await supabase.auth.signUp({
- email,
- password,
- options: {
- emailRedirectTo: redirectUrl
- }
- });
- return { error };
- };
- const signOut = async () => {
- const { error } = await supabase.auth.signOut();
- return { error };
- };
- return {
- user,
- session,
- loading,
- signIn,
- signUp,
- signOut,
- };
- }
|