From 7b76bde15b2bd8585626fcd857277d9cef999fed Mon Sep 17 00:00:00 2001 From: Daniel Arroyo Date: Sat, 15 Aug 2026 12:02:57 -0400 Subject: [PATCH] fix(change-password): force entity refresh in response to avoid stale mustChangePassword El cambio-password persistia bien a la DB (login con la nueva pass daba 200 OK), pero la respuesta del endpoint seguia reportando mustChangePassword: true. Era un problema de Panache/Hibernate cache: la user entity quedaba cacheada en el persistence context con el estado pre-cambio, y User.findById() siguiente devolvia esa misma instancia cacheada. Fix: despues de findById, forzar refresh desde DB con User.getEntityManager().refresh(refreshed). Asi el response refleja el estado actual real de la fila. --- src/main/java/com/l2/shots/auth/AuthResource.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/l2/shots/auth/AuthResource.java b/src/main/java/com/l2/shots/auth/AuthResource.java index afec130..efe5ad4 100644 --- a/src/main/java/com/l2/shots/auth/AuthResource.java +++ b/src/main/java/com/l2/shots/auth/AuthResource.java @@ -90,12 +90,17 @@ public class AuthResource { if (jwt.isEmpty()) return Response.status(401).build(); Optional user = authService.getEntityFromToken(jwt.get()); if (user.isEmpty()) return Response.status(401).build(); + User current = user.get(); AuthService.ChangePasswordResult result = authService.changePassword( - user.get().id, body.currentPassword(), body.newPassword()); + current.id, body.currentPassword(), body.newPassword()); switch (result) { case OK: - User refreshed = User.findById(user.get().id); + // Refetch fresh desde DB porque la version cacheada en el + // persistence context tenia mustChangePassword=true (estado + // previo al cambio). Mejor un read fresco. + User refreshed = User.findById(current.id); if (refreshed == null) return Response.status(401).build(); + User.getEntityManager().refresh(refreshed); String newToken = authService.buildToken(refreshed.id); return Response.ok(AuthService.toAuthMe(refreshed)) .cookie(buildAuthCookie(newToken))