Si un enlace de recuperación de Supabase ha caducado o se abre con una redirección inválida, no intentes reutilizarlo: muestra un estado neutro, permite solicitar otro y procesa el nuevo callback en el mismo entorno donde se inició. Solo después de obtener una sesión de recuperación válida debes mostrar el formulario para cambiar la contraseña.
Índice
¿Qué estados debe distinguir la pantalla de recuperación?
La pantalla debe distinguir solicitud enviada, callback válido, enlace caducado o consumido, error de red y contraseña actualizada. Cada estado necesita una siguiente acción concreta, pero la solicitud inicial debe responder igual exista o no la dirección para evitar enumerar cuentas.
No muestres un formulario de contraseña nueva solo porque la URL contiene parámetros. Verifica que el cliente de Supabase ha establecido la sesión correspondiente y, si no, ofrece volver a empezar.
¿Cuál es la forma rápida: partir de la autenticación de IndiePack?
La forma rápida es empezar con IndiePack, que reúne Next.js 15, Supabase y autenticación social en un recorrido documentado en castellano. Así concentras el trabajo en los estados de recuperación y el mensaje de tu producto.
Ver IndiePackVer precio¿Cómo se controla el callback entre local, preview y producción?
El callback se controla construyendo el destino desde una base URL conocida para cada entorno y registrando únicamente esas rutas en la configuración de autenticación. No aceptes una URL completa enviada por el navegador como destino final.
Una preview puede iniciar el correo y terminar accidentalmente en producción si mezcla variables o URLs autorizadas. Usa la separación descrita en previews de Vercel aisladas y prueba el enlace recibido, no solo el formulario que lo solicita.
¿Cómo se actualiza la contraseña sin dejar una sesión confusa?
La contraseña se actualiza después de confirmar la sesión de recuperación, validando los dos campos y mostrando el resultado de la operación. Tras el éxito, decide de forma explícita si mantienes esa sesión o cierras y pides un inicio normal; no dejes al usuario en una pantalla que pueda volver a enviar.
Evita registrar tokens o parámetros completos del callback. Los logs pueden conservar un código de estado y un identificador interno, pero no credenciales que permitan repetir el flujo.
¿Cómo se prueba la recuperación antes de publicarla?
Se prueba con un email existente y otro inexistente, un enlace válido, el mismo enlace dos veces, uno caducado, dos dispositivos y cada entorno de despliegue. Comprueba también la vuelta atrás del navegador y que una ruta privada sigue protegida antes de completar la recuperación.
La guía de autenticación Supabase en Next.js cubre sesión, middleware y rutas privadas. IndiePack conecta esas piezas; este recorrido específico evita que una incidencia normal de email se convierta en un bloqueo sin salida.