Adityahulk
Restoring repo state for deployment
6fc3143
Raw
History Blame Contribute Delete
3.79 kB
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}`)
}