Autenticacion y roles
Como entra un usuario, como se verifica en el servidor y como se da acceso al panel.
Las cuentas van con Firebase Auth: registro, acceso, verificacion de correo y recuperacion de contrasena. Lo que hay que entender no es esa parte, que es estandar, sino donde se comprueba de verdad quien eres.
El navegador no decide nada
El navegador guarda una sesion y obtiene un token. Ese token viaja en cada peticion a la API, y el servidor lo verifica siempre antes de hacer nada.
Ninguna decision de permisos se toma en el cliente. Si escondes un boton en la interfaz, has mejorado la experiencia; no has protegido nada. La proteccion esta en que la ruta rechaza la peticion.
Es la diferencia entre una aplicacion que parece segura y una que lo es.
Como se es administrador
No hay un campo "es administrador" en la base de datos. El permiso vive en la
configuracion del despliegue: la variable de entorno ADMIN_EMAILS, una
lista de correos separados por comas.
Funciona asi:
- El servidor verifica el token y saca el correo.
- Compara ese correo con la lista, sin distinguir mayusculas.
- Si no esta, la peticion se rechaza. Da igual que la direccion se escriba a mano.
Y en la interfaz, quien esta en la lista ve un boton hacia el panel en su perfil. Quien no, no lo ve, y tampoco entra escribiendo la direccion.
Esto tiene una consecuencia buena: nadie se hace administrador tocando la base de datos, porque ahi no esta el permiso. Para dar acceso a alguien se anade su correo a la variable y se vuelve a desplegar.
Los errores no cuentan de mas
Las rutas de administracion responden con un codigo de error fijo, nunca con el mensaje interno de la excepcion. Un fallo puede indicar que algo se rompio, pero no describe que ni donde.
Un mensaje de error hablador es informacion gratis para quien esta probando la puerta.
Limites y abuso
Las rutas sensibles pasan por un limitador distribuido en Firestore. Que sea distribuido importa: un limitador guardado en la memoria del proceso no sirve cuando hay varias instancias, porque cada una cuenta por su cuenta.
Para las pruebas gratuitas hay ademas una proteccion contra abuso que combina huella del navegador e IP, de forma que un visitante anonimo no pueda consumir sin fin abriendo cuentas nuevas. Las IP se guardan cifradas con una sal, nunca en claro.
Que tienes que revisar tu
- Activa en Firebase los proveedores de acceso que quieras, ademas del correo y contrasena.
- Pon
ADMIN_EMAILScon tus correos reales antes de desplegar. - Ajusta los limites de
src/config/rate-limits.tsa tu trafico esperado. - Genera tus propias sales: las que vienen empiezan por
change-me-.