fix-magic-link

This commit is contained in:
João Gustavo 2025-10-14 21:41:39 -03:00
parent 49f18ca694
commit 708f2bf211

View File

@ -1,6 +1,7 @@
// lib/api.ts // lib/api.ts
import { ENV_CONFIG } from '@/lib/env-config'; import { ENV_CONFIG } from '@/lib/env-config';
import { sendMagicLink } from './auth';
// Use ENV_CONFIG for SUPABASE URL and anon key in frontend // Use ENV_CONFIG for SUPABASE URL and anon key in frontend
export type ApiOk<T = any> = { export type ApiOk<T = any> = {
@ -1191,6 +1192,8 @@ export type CreateUserInput = {
full_name: string; full_name: string;
phone?: string | null; phone?: string | null;
role: UserRoleEnum; role: UserRoleEnum;
// URL opcional para redirecionamento após o clique no magic link
redirect_url?: string | null;
}; };
export type CreatedUser = { export type CreatedUser = {
@ -1228,7 +1231,38 @@ export async function criarUsuario(input: CreateUserInput): Promise<CreateUserRe
headers: { ...baseHeaders(), "Content-Type": "application/json" }, headers: { ...baseHeaders(), "Content-Type": "application/json" },
body: JSON.stringify(input), body: JSON.stringify(input),
}); });
return await parse<CreateUserResponse>(res); const parsed = await parse<CreateUserResponse>(res);
// Enviar magic link automaticamente para o email do usuário criado.
// Se redirect_url estiver presente, encaminhar na chamada do magic link
(async () => {
try {
// A API de magic link aceita geralmente { email, redirect_to } ou { email }
// Aqui usamos a função sendMagicLink existente que aceita apenas email.
// Para suportar redirect_url, fazemos um fetch direto caso redirect_url seja fornecido.
if (input.redirect_url) {
const otpUrl = (ENV_CONFIG.AUTH_ENDPOINTS && (ENV_CONFIG.AUTH_ENDPOINTS as any).OTP) || `${ENV_CONFIG.SUPABASE_URL}/auth/v1/otp`;
console.log('[API] Enviando magic link com redirect_url para:', input.email, input.redirect_url);
await fetch(otpUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'apikey': ENV_CONFIG.SUPABASE_ANON_KEY,
},
body: JSON.stringify({ email: input.email, redirect_to: input.redirect_url }),
});
} else {
console.log('[API] Enviando magic link (sem redirect) para:', input.email);
await sendMagicLink(input.email);
}
console.log('[API] Magic link disparado com sucesso (assíncrono).');
} catch (e) {
console.error('[API] Falha ao enviar magic link automaticamente:', e);
}
})();
return parsed;
} }
// ===== ALTERNATIVA: Criar usuário diretamente via Supabase Auth ===== // ===== ALTERNATIVA: Criar usuário diretamente via Supabase Auth =====