Funciones · Inicio de sesión y correo
Inicio de sesión con Google, sin Google Cloud.
“Continuar con Google” e inicio de sesión con correo para las personas que usan tu app, sin proyecto de Google Cloud, sin cliente de OAuth y sin claves. Su correo de creación de cuenta sale con el nombre de tu app, desde tu propio dominio en cuanto este se verifica.
Lo que llama tu agente
appAuthConfigureappAuthStatusappAuthEmailConnectappAuthEmailStatus
Let staff sign in with Google
Update(app/login/page.tsx)
1 line · Google button → TOFU_SIGN_IN_URL
Write(app/auth/confirm/route.ts)
new route · verifyOtp for the email link
tofu · appAuthConfigure confirmed: true
configured · Google sign-in, and email sign-in as well
Cómo funciona el inicio de sesión con Google
Tofu habla con Google, para que tu app no tenga que hacerlo.
El intermediario de Tofu en oauth.trytofu.ai tiene un solo cliente de Google y una URL de retorno permanente. Tu app envía el navegador allí; el intermediario inicia la sesión de la persona en el servicio de autenticación de tu propia app: el proyecto de Supabase que está detrás de su base de datos administrada.
- Tu app“Continuar con Google” envía el navegador al intermediario de Tofu.
- oauth.trytofu.aiComprueba que la dirección de retorno sea de tu app, y nada más.
- GoogleLa persona inicia sesión en la pantalla de consentimiento del cliente de Tofu.
- El servicio de autenticación de tu appLa cuenta se crea o se busca allí, y el navegador vuelve con la sesión iniciada.
Como el intermediario es la única parte que habla con Google, de tu lado no hay proyecto de Google Cloud, cliente de OAuth ni clave, y nadie tiene que hacer ningún paso en una consola por cada app.
En un solo paso confirmado, appAuthConfigure escribe el inicio de sesión con Google y con correo en el servicio de autenticación de tu app; después vuelve a leer la configuración antes de indicar configurado.
Desplegar con una base de datos no basta para activar el inicio de sesión: hace falta una llamada explícita después del despliegue, y repetirla es seguro.
// Continue with Google — Tofu brokers the sign-in.
window.location.href = process.env.NEXT_PUBLIC_TOFU_SIGN_IN_URL + "?return=" +
encodeURIComponent(window.location.href);&flow=pkce al enlace de inicio de sesión y completa el proceso en una ruta pequeña propia. Tu agente escribe ambas cosas.Correo de registro, con el nombre de tu app.
El inicio de sesión con correo se activa en el mismo paso, así que una cuenta siempre tiene una forma de volver a entrar si algún inicio de sesión de terceros deja de estar disponible.
El servicio de autenticación de tu app envía sus correos (confirmation, magic-link, password-reset, invitation, address-change y reauthentication) a través de la configuración de correo de Tofu, con el nombre de tu app como remitente. Sin contraseña SMTP ni proveedor de correo al que registrarse.
Cada mensaje incluye un código de un solo uso además de un enlace, porque los escáneres de correo que abren primero los enlaces gastarían el token antes de que tu usuario pueda usarlo.
| Cuándo | Se envía desde |
|---|---|
| Hasta que tu dominio se verifique | noreply@notify.trytofu.app |
| Cuando se verifique | noreply@send.frankskitchen.com |
Desde tu dominio
Seis registros DNS, ninguno en la raíz de tu dominio.
Cuando tu dominio esté conectado, appAuthEmailConnect crea una identidad de envío para send.frankskitchen.com y publica sus registros, todos bajo send., así que el correo que tu dominio ya recibe no se modifica. Si los eliminas, el dominio queda exactamente como estaba.
| Tipo | Nombre, dentro de frankskitchen.com | Valor |
|---|---|---|
| CNAME | ‹token 1›._domainkey.send | ‹token 1›.dkim.amazonses.com |
| CNAME | ‹token 2›._domainkey.send | ‹token 2›.dkim.amazonses.com |
| CNAME | ‹token 3›._domainkey.send | ‹token 3›.dkim.amazonses.com |
| MX 10 | bounce.send | feedback-smtp.‹region›.amazonses.com |
| TXT | bounce.send | v=spf1 include:amazonses.com ~all |
| TXT | _dmarc.send | v=DMARC1; p=none; rua=mailto:… |
Si la conexión de tu dominio ya tiene la aprobación de Cloudflare, Tofu escribe los registros por su cuenta, sin una segunda aprobación. En cualquier otro caso, los enumera para que los agregues y pide al proveedor de correo que los verifique.
Hasta que el proveedor de correo informe que el dominio está verificado, el correo sigue saliendo desde notify.trytofu.app: la creación de cuentas nunca se detiene mientras esperas.
Un enlace que un escáner no puede gastar.
Cada mensaje enlaza a /auth/confirm en la dirección propia de tu app, y el token solo se gasta cuando tu app llama a verifyOtp. Así, un escáner que abre el enlace primero llega a tu app, no al servicio de inicio de sesión.
Una app nueva creada con la skill /tofu incluye esta ruta; tu agente la escribe. Una app desplegada sin esta ruta permite iniciar sesión de todos modos con el código de cada mensaje.
import { createClient } from '@/lib/supabase/server';
import { NextResponse } from 'next/server';
export async function GET(request) {
const { searchParams, origin } = new URL(request.url);
const token_hash = searchParams.get('token_hash');
const type = searchParams.get('type');
if (token_hash && type) {
const supabase = await createClient();
const { error } =
await supabase.auth.verifyOtp({ type, token_hash });
if (!error) return NextResponse.redirect(`${origin}/`);
}
return NextResponse.redirect(`${origin}/login?error=link`);
}Próximamente.
La pantalla de consentimiento muestra el nombre de Tofu. Google muestra el nombre verificado del cliente de Tofu con el que se inicia sesión, así que las personas ven “Continuar a Tofu”. Para tener tu propio nombre ahí necesitas un cliente de Google propio, que todavía no está implementado.
Solo con una base de datos administrada por Tofu. El inicio de sesión se escribe en el servicio de autenticación que está detrás de la base de datos administrada de tu app. Una app con Clerk, Auth0 o un proyecto de Supabase propio queda exactamente como está.
Google y correo, nada más. Los usuarios de tu app no pueden iniciar sesión con GitHub ni con Apple.
Correo de inicio de sesión, no los demás correos de tu app. Tofu envía los mensajes de inicio de sesión y de registro; los recibos, las notificaciones y todo lo demás que envíe tu app no pasan por Tofu.
Para usar tu propio remitente necesitas tu propio dominio. Primero hay que conectar el dominio a la app; hasta que se verifique, el correo sale desde noreply@notify.trytofu.app.
El remitente con tu propio dominio es la parte más reciente. Sus registros, su verificación y el cambio de remitente ya funcionaron de principio a fin en el proyecto de prueba de Tofu, pero todavía no en la app de un cliente.
Pega un prompt. En línea en 10 minutos.
Tu app, su base de datos, tu dominio y tu inicio de sesión: desde el agente que ya usas, en unos 10 minutos.
Describe una app o trae una hecha con tu agente. Tofu la pone en línea.
Funciona con cualquier agente de programación
Recursos
Comparar
© 2026 Tofu
trytofu.ai
Traducido del inglés. Si las dos versiones no coinciden, prevalece el original en inglés.