feat(auth): verifie le lien de reset des le chargement, sans le consommer

Ajoute GET /auth/reset-password/validate (lecture seule, sans rate
limit : le jeton est un secret de 256 bits non brute-forcable) pour que
la page reset-password redirige immediatement vers /login si le lien
est invalide ou expire, plutot que d'attendre la soumission du
formulaire. La verification a la soumission (confirm_password_reset)
reste la seule source de verite atomique.
This commit is contained in:
Johan LEROY
2026-09-17 15:28:50 +02:00
parent e381e0de09
commit d7f775f9f7
12 changed files with 181 additions and 5 deletions
+10
View File
@@ -27,6 +27,7 @@ from app.schemas.auth import (
PasswordChangeRequest,
PrincipalResponse,
ResetPasswordRequest,
ResetTokenValidationResponse,
TokenResponse,
)
from app.schemas.errors import ErrorResponse
@@ -320,6 +321,15 @@ async def forgot_password(
) from erreur
@router.get(
"/reset-password/validate",
response_model=ResetTokenValidationResponse,
summary="Vérifie sans le consommer si un lien de réinitialisation est encore valide",
)
async def validate_reset_token(token: str, service: AuthServiceDep) -> ResetTokenValidationResponse:
return ResetTokenValidationResponse(valid=await service.is_reset_token_valid(token=token))
@router.post(
"/reset-password",
response_model=TokenResponse,