La prueba consiste en realizar tanto el frontend como el backend de un login usando jwt con dos tipos de usuarios: administradores y socios. A pesar de ser una prueba de fullstack, tiene más peso el back. Está realizada con una serie de tecnologias base que venian con el template inicial:
Para su realización he tomado como punto inicial este video de freeCodeCamp y su correspondiente código que ya vi hace unos años, que explica como realizar un login con passport.js y conectarlo a un front angular. Además, se ha implementado un RBAC sencillo y algunos endpoints que se requerian.
He adjuntado también el enunciado. El proyecto se divide en dos partes y cada uno tiene su propio "sub-enunciado": el de front y el de back
Hay llamadas de prueba en /src/rest
, que se pueden ejecutar con REST Client (extension ID humao.rest-client
) de VSCode o con rest.nvim por ejemplo.
- El .env esta pusheado deliberadamente
- En el enunciado hay ambigüedad alrededor de la palabra 'usuario' en cuanto a los roles. A pesar de esto, creo que he hecho la implementación intencionada.
- Sé que moment.js esta deprecada, pero dado que el proyecto de referencia ya la usaba, he puesto esa
- Nada más empezar problema al iniciar el docker-compose el proceso mysql llega a 11 GB de memoria, llenando la memoria i el pc se bloqueaba. Sucesivos intentos hacian lo mismo, asi que se ha tenido que Subir de MySql a latest (8.x) y ha funcionado.
- Algunos cambios al package.json, añadiendo
npx
delante de comandos - Debido a la subida a MySql 8 he tenido que cambiar el package mysql al mysql2 para que funcione la conexión
- Downgrade en la versión de argon2 a la 0.26.2 porque habia un crash en la versión que venia en el package.json y en la latest. En un entorno real hubiera cambiado de lib porque las libs de crypto no deben estar desactualizadas, pero aquí da igual.
- Añadidas muchas declaraciones de tipos
- No se esta usando strict: true en el tsconfig, pero eso no lo he cambiado porque aparecen demasiados errores en la plantilla
- Faltaba el handling del preflight de CORS para OPTIONS
- Habia un bug en el proyecto referencia relacionado con el
iat
del JWT que impedia la correcta expiración del token