5.8 KiB
Auth y fotos de perfil
Objetivo
Definir de forma implementable las paginas de login, registro, recuperacion, MFA simulado y gestion de fotos de perfil. Estos flujos son obligatorios porque prueban auth, session, sium, http, storage, cache, perm, logger, bus, orca, frontend, adom, lang, format y PocketBase como backend local.
Rutas de autenticacion
/dating/login
Pantalla dedicada para iniciar sesion.
Campos:
- email;
- password;
- recordarme en este dispositivo;
- idioma;
- tema.
Estados:
- idle;
- submitting;
- invalid credentials;
- account limited;
- session restored;
- mfa required;
- network error;
- offline.
Integraciones:
sium: schema de login.auth: login.session: guardar sesion activa.http: request al endpoint.storage: preferencia local de dispositivo si aplica.logger: trace sin password.bus: eventodating.auth.login.orca: flujo login -> session -> redirect.
/dating/register
Pantalla dedicada para crear cuenta.
Campos:
- email;
- password;
- confirm password;
- nombre visible inicial;
- confirmacion de edad adulta;
- aceptacion de reglas de demo/privacidad local.
Estados:
- idle;
- submitting;
- email already used;
- weak password;
- adult confirmation missing;
- created;
- redirect to onboarding.
Integraciones:
sium: schema de registro y confirmacion de password.auth: register.session: iniciar sesion tras registro si procede.perm: rol inicialuser.logger: evento de seguridad redacted.bus:dating.auth.registered.orca: register -> session -> onboarding draft.
/dating/reset
Recuperacion simulada. La UI no debe revelar si el email existe.
Campos:
- email.
Estados:
- idle;
- submitting;
- sent;
- network error.
/dating/mfa
MFA simulado para probar flujo, aunque la primera version local no tenga MFA real activado.
Campos:
- codigo de 6/8 digitos;
- recuperar acceso;
- confiar en dispositivo si se habilita.
Estados:
- pending;
- invalid code;
- expired code;
- verified;
- locked.
Componentes de auth
Componentes candidatos a uix:
AuthLayoutLoginFormRegisterFormResetPasswordFormMfaChallengeSessionRestoreGateAuthError
Componentes especificos de dating:
DatingAuthHeaderDatingPrivacyNotice
Fotos de perfil
Modelo inicial
La demo usa el campo photos de dating_profiles en PocketBase:
- tipo
file; - maximo 6 fotos;
- formatos: JPEG, PNG, WebP;
- tamano maximo: 5 MB por foto;
- thumbnails:
120x120y400x600.
Para v2 avanzada se puede extraer una coleccion dating_profile_photos si se necesita moderacion por foto, orden individual persistente, captions o estados por archivo. Para la demo inicial, el campo file multiple es suficiente.
/dating/profile/photos
Pantalla dedicada para gestionar fotos.
Funciones:
- subir fotos por selector;
- drag and drop;
- preview antes de guardar;
- ordenar fotos;
- marcar foto principal;
- eliminar foto;
- reemplazar foto;
- mostrar progreso de subida;
- mostrar errores por archivo;
- guardar cambios;
- cancelar y recuperar estado anterior.
Estados:
- empty;
- local preview;
- uploading;
- uploaded;
- upload failed;
- too many files;
- invalid type;
- file too large;
- reorder pending;
- deleting;
- saved.
Validaciones
Cliente:
- maximo 6 fotos;
- tipos permitidos;
- tamano maximo;
- no permitir publicar perfil visible sin al menos una foto si esa regla esta activa;
- alt text o descripcion opcional para accesibilidad futura.
Servidor:
- repetir limites de tipo/tamano;
- comprobar que el perfil pertenece al usuario;
- moderador/admin puede ocultar o borrar fotos si se implementa;
- usuario limitado puede tener subida bloqueada segun
perm.
Integraciones
sium: schema de metadata de fotos y reglas de perfil.http: upload multipart al endpoint de perfil.cache: invalidarprofile.me,discover.feedy perfiles vistos.storage: guardar previews/draft solo como metadata local, no blobs grandes salvo decision explicita.perm:profile:photo:add,profile:photo:delete,profile:photo:reorder.logger: trazas sin incluir contenido binario.bus: eventosdating.profile.photo.added,dating.profile.photo.removed,dating.profile.photo.reordered.orca: coordinar upload -> cache invalidation -> profile refresh -> discover refresh.adom: drag/drop, focus restore, keyboard reordering.frontend: layout responsive del gestor.
Endpoints requeridos
Estos endpoints los sirve el servidor independiente servers/dating, no SvelteKit:
POST /api/auth/registerPOST /api/auth/loginPOST /api/auth/logoutPOST /api/auth/resetPOST /api/auth/mfa/verifyGET /api/sessionPOST /api/profile/photosDELETE /api/profile/photos/:filenamePATCH /api/profile/photos/orderPATCH /api/profile/photos/main
Reglas de permisos
| Accion | Usuario | Limitado | Moderador | Admin |
|---|---|---|---|---|
auth:login |
si | si | si | si |
auth:logout |
si | si | si | si |
profile:photo:add |
si | no | si | si |
profile:photo:delete:self |
si | parcial | si | si |
profile:photo:moderate |
no | no | si | si |
profile:photo:reorder |
si | no | si | si |
Tests minimos
- login correcto redirige a discover u onboarding.
- login invalido no crea sesion.
- registro crea usuario
dating_usersy redirige a onboarding. - recuperacion no revela si el email existe.
- MFA invalido muestra error y conserva challenge.
- upload de foto valida actualiza
dating_profiles.photos. - upload de tipo invalido falla antes de enviar.
- upload superior a 5 MB falla.
- usuario limitado no puede subir foto.
- eliminar foto invalida cache de perfil/discover.
- reordenar fotos conserva la foto principal.
- devtools muestra eventos/logs sin exponer password ni binarios.