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:
2026-08-14 20:21:14 -07:00
parent e9a37f3ed7
commit aaed2dd082
3 changed files with 18 additions and 4 deletions
+15
View File
@@ -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);
};