import { createRouteHandlerClient } from '@supabase/auth-helpers-nextjs'; import { cookies } from 'next/headers'; import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; export async function GET(request: NextRequest) { const requestUrl = new URL(request.url); const code = requestUrl.searchParams.get('code'); console.log('Auth callback received:', { url: request.url, hasCode: !!code }); // If no code parameter found, redirect to login page if (!code) { console.log('No code parameter found, redirecting to login page'); return NextResponse.redirect(new URL('/login', request.url)); } try { // Create Supabase client const cookieStore = cookies(); const supabaseRouteHandler = createRouteHandlerClient({ cookies: () => cookieStore }); // Exchange code for session console.log('Starting code exchange for session'); const { data, error } = await supabaseRouteHandler.auth.exchangeCodeForSession(code); if (error) { console.error('Error exchanging code for session:', error); throw error; } console.log('Successfully retrieved session, user:', data.session?.user.email); // Check if session was successfully created if (data.session) { console.log('Session created successfully:', { userId: data.session.user.id, email: data.session.user.email, expiresAt: data.session.expires_at ? new Date(data.session.expires_at * 1000).toISOString() : 'unknown' }); // Set additional cookie to ensure client can detect login status // Use Next.js Response to set cookie const response = NextResponse.redirect(new URL('/', request.url)); response.cookies.set({ name: 'sb-auth-token', value: 'true', path: '/', maxAge: 60 * 60 * 24 * 7, // 7 days sameSite: 'lax', secure: process.env.NODE_ENV === 'production', httpOnly: false, }); console.log('Set backup cookie: sb-auth-token'); return response; } // Redirect to home page by default console.log('Redirecting to home page'); return NextResponse.redirect(new URL('/', request.url)); } catch (error) { console.error('Auth callback error:', error); // Redirect to login page on error return NextResponse.redirect( new URL('/login?message=Authentication failed. Please try again.', request.url) ); } }