Spaces:
Running
Running
| import { createServerClient, type CookieOptions } from '@supabase/ssr' | |
| import { createClient } from '@supabase/supabase-js' | |
| import { cookies } from 'next/headers' | |
| import { NextResponse } from 'next/server' | |
| export async function GET(request: Request) { | |
| console.log("\n=== AUTH CALLBACK START ==="); | |
| const { searchParams, origin } = new URL(request.url) | |
| const code = searchParams.get('code') | |
| const next = searchParams.get('next') ?? '/' | |
| console.log("Code present:", !!code); | |
| console.log("Redirect target:", next); | |
| if (code) { | |
| const cookieStore = await cookies() | |
| const supabase = createServerClient( | |
| process.env.NEXT_PUBLIC_SUPABASE_URL!, | |
| process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, | |
| { | |
| cookies: { | |
| getAll() { | |
| return cookieStore.getAll() | |
| }, | |
| setAll(cookiesToSet) { | |
| cookiesToSet.forEach(({ name, value, options }) => { | |
| cookieStore.set(name, value, options) | |
| }) | |
| }, | |
| }, | |
| } | |
| ) | |
| console.log("Exchanging code for session..."); | |
| const { data: { session }, error } = await supabase.auth.exchangeCodeForSession(code) | |
| if (error) { | |
| console.error('β Auth exchange error:', error) | |
| return NextResponse.redirect(`${origin}/auth/error?error=${encodeURIComponent(error.message)}`) | |
| } | |
| if (session?.user) { | |
| console.log("β Auth successful. User ID:", session.user.id); | |
| console.log("User email:", session.user.email); | |
| // SYNC USER TO DATABASE | |
| console.log("Checking if user exists in DB..."); | |
| // Use the authenticated supabase client (has the session) | |
| const { data: existingUser, error: fetchError } = await supabase | |
| .from('users') | |
| .select('id') | |
| .eq('id', session.user.id) | |
| .single(); | |
| console.log("Fetch result:", { existingUser, fetchError }); | |
| if (fetchError && fetchError.code !== 'PGRST116') { | |
| console.error("β Error checking user existence:", fetchError); | |
| } | |
| if (!existingUser) { | |
| console.log("π User not found in DB. Attempting insert..."); | |
| const insertData = { | |
| id: session.user.id, | |
| email: session.user.email, | |
| full_name: session.user.user_metadata.full_name || null, | |
| avatar_url: session.user.user_metadata.avatar_url || null, | |
| credits: 5 | |
| }; | |
| console.log("Insert data:", insertData); | |
| const { data: insertResult, error: insertError } = await supabase | |
| .from('users') | |
| .insert(insertData) | |
| .select(); | |
| if (insertError) { | |
| console.error("β INSERT FAILED:", insertError); | |
| console.error("Error code:", insertError.code); | |
| console.error("Error message:", insertError.message); | |
| console.error("Error details:", insertError.details); | |
| console.error("Error hint:", insertError.hint); | |
| } else { | |
| console.log("β Successfully inserted user:", insertResult); | |
| } | |
| } else { | |
| console.log("β User already exists in DB"); | |
| } | |
| } | |
| } | |
| console.log("Redirecting to:", `${origin}${next}`); | |
| console.log("=== AUTH CALLBACK END ===\n"); | |
| return NextResponse.redirect(`${origin}${next}`) | |
| } | |