fix password reset
This commit is contained in:
parent
6a21fd010d
commit
b26dcc8777
@ -4,7 +4,7 @@ from ..dependencies import users_token, database, mail
|
||||
from ..models import users, email
|
||||
from fastapi.responses import JSONResponse, HTMLResponse
|
||||
from fastapi_mail import MessageSchema, MessageType, FastMail
|
||||
import random, os
|
||||
import random, os, bcrypt
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@ -68,15 +68,28 @@ async def reset_password(request: Request, key: str | None = None, email: str |
|
||||
detail="Parameters 'key' and 'email' are required"
|
||||
)
|
||||
|
||||
# Vérifier que la clé correspond à celle stockée dans Redis
|
||||
# Récupérer la clé hachée depuis Redis
|
||||
key_hashed = database.connect_redis.get(email)
|
||||
print("Key hashed : ${0} \nKey : ${1}".format(key_hashed))
|
||||
if key_hashed is None or key_hashed != key:
|
||||
|
||||
if key_hashed is None:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Key is invalid or expired"
|
||||
detail="Invalid or expired reset key"
|
||||
)
|
||||
|
||||
# Redis stocke les valeurs en `bytes`, donc il faut décoder si nécessaire
|
||||
if isinstance(key_hashed, bytes):
|
||||
key_hashed = key_hashed.decode()
|
||||
|
||||
|
||||
# Vérifier que la clé en clair correspond au hash stocké
|
||||
if not bcrypt.checkpw(key.encode(), key_hashed.encode()):
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="Invalid reset key"
|
||||
)
|
||||
|
||||
|
||||
# Afficher la page HTML de réinitialisation du mot de passe
|
||||
return templates.TemplateResponse("reset_password.html", {"request": request, "email": email, "key": key})
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user