Fix: pasar el signin por endpoint propio para completar PKCE
El flow OAuth de Supabase (@supabase/ssr) es PKCE por default: requiere guardar un code_verifier en cookies del cliente ANTES de mandar al user a Google. El login.astro anterior linkeaba directo a supabase.buglabs.dev/auth/v1/authorize saltándose ese paso, así que el exchangeCodeForSession del callback fallaba sin cookies válidas. Ahora el botón "Continuar con Google" apunta a /api/auth/signin, que usa supabase.auth.signInWithOAuth() — este método sí setea el code_verifier en las cookies del dominio de la app, y después el callback lo recupera para completar el intercambio. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
import type { APIRoute } from 'astro';
|
||||
import { serverClient } from '@/lib/supabase';
|
||||
|
||||
export const GET: APIRoute = async ({ cookies, url, redirect }) => {
|
||||
const appUrl = process.env.PUBLIC_APP_URL ?? import.meta.env.PUBLIC_APP_URL ?? url.origin;
|
||||
const supabase = serverClient(cookies);
|
||||
|
||||
const { data, error } = await supabase.auth.signInWithOAuth({
|
||||
provider: 'google',
|
||||
options: { redirectTo: `${appUrl}/api/auth/callback` },
|
||||
});
|
||||
|
||||
if (error || !data?.url) return redirect('/login?error=oauth');
|
||||
return redirect(data.url);
|
||||
};
|
||||
Reference in New Issue
Block a user