File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 22
33import { Suspense , useEffect , useState } from "react" ;
44import { useRouter , useSearchParams } from "next/navigation" ;
5- import { createClient } from "@supabase/ supabase-js " ;
5+ import { supabase } from "@/lib/ supabase" ;
66import { Loader2 , CheckCircle2 , AlertCircle } from "lucide-react" ;
77
88/**
99 * Auth Callback Page
1010 *
11- * Handles the redirect from Supabase magic link.
12- * Supabase passes tokens in the URL hash, which must be handled client-side .
11+ * Handles the redirect from Supabase magic link or OAuth .
12+ * Uses the shared Supabase client to ensure PKCE code verifier is available .
1313 */
1414
15- const supabase = createClient (
16- process . env . NEXT_PUBLIC_SUPABASE_URL ! ,
17- process . env . NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY !
18- ) ;
19-
2015function AuthCallbackContent ( ) {
2116 const router = useRouter ( ) ;
2217 const searchParams = useSearchParams ( ) ;
Original file line number Diff line number Diff line change @@ -16,22 +16,29 @@ export default function Header() {
1616
1717 useEffect ( ( ) => {
1818 const checkAuth = async ( ) => {
19- // Use getUser() as it provides a more definitive check than getSession( )
20- const { data : { user } , error } = await supabase . auth . getUser ( ) ;
19+ // First check session (faster, from localStorage )
20+ const { data : { session } } = await supabase . auth . getSession ( ) ;
2121
22- if ( error || ! user ) {
23- setUser ( null ) ;
24- } else {
25- setUser ( user ) ;
22+ if ( session ?. user ) {
23+ setUser ( session . user ) ;
24+ setIsLoading ( false ) ;
25+ return ;
2626 }
27+
28+ // Fallback to getUser if no session (validates with server)
29+ const { data : { user : authUser } } = await supabase . auth . getUser ( ) ;
30+ setUser ( authUser || null ) ;
2731 setIsLoading ( false ) ;
2832 } ;
2933
3034 checkAuth ( ) ;
3135
32- const { data : { subscription } } = supabase . auth . onAuthStateChange ( async ( event , session ) => {
33- if ( event === "SIGNED_OUT" || event === "USER_UPDATED" && ! session ) {
36+ const { data : { subscription } } = supabase . auth . onAuthStateChange ( ( event , session ) => {
37+ // Handle all relevant auth events
38+ if ( event === "SIGNED_OUT" ) {
3439 setUser ( null ) ;
40+ } else if ( event === "SIGNED_IN" || event === "TOKEN_REFRESHED" || event === "INITIAL_SESSION" ) {
41+ setUser ( session ?. user || null ) ;
3542 } else if ( session ?. user ) {
3643 setUser ( session . user ) ;
3744 }
You can’t perform that action at this time.
0 commit comments