68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
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)
|
|
);
|
|
}
|
|
}
|