🛂 Added change-password in backend
This commit is contained in:
@@ -39,6 +39,12 @@ async def cache_account(criteria: str, content: str) -> Union[User, None]:
|
||||
return None
|
||||
|
||||
|
||||
async def clear_cache_for_account(user: User):
|
||||
await redis.delete(user.email)
|
||||
await redis.delete(user.username)
|
||||
await redis.delete(str(user.id))
|
||||
|
||||
|
||||
async def get_from_redis(key: str) -> Union[None, User]:
|
||||
user = await redis.get(key)
|
||||
if user is None:
|
||||
|
||||
@@ -127,3 +127,8 @@ class GameSession(BaseModel):
|
||||
game_id: str
|
||||
players: list[GamePlayer | None]
|
||||
answers: list[GameAnser1 | None]
|
||||
|
||||
|
||||
class UpdatePassword(BaseModel):
|
||||
old_password: str
|
||||
new_password: str
|
||||
|
||||
@@ -8,6 +8,7 @@ from fastapi.security import OAuth2PasswordRequestForm
|
||||
|
||||
from classquiz.auth import *
|
||||
from classquiz.config import redis
|
||||
from classquiz.cache import clear_cache_for_account
|
||||
from classquiz.db.models import *
|
||||
from classquiz.emails import send_register_email
|
||||
|
||||
@@ -115,3 +116,18 @@ async def verify_user(verify_key: str):
|
||||
user.verify_key = None
|
||||
await user.update()
|
||||
return RedirectResponse(url="/account/login?verified=true")
|
||||
|
||||
|
||||
@router.put("/password/update")
|
||||
async def change_password(password_data: UpdatePassword, response: Response, user: User = Depends(get_current_user)):
|
||||
if not verify_password(password_data.old_password, user.password):
|
||||
raise HTTPException(status_code=400, detail="Incorrect password")
|
||||
user.password = get_password_hash(password_data.new_password)
|
||||
await user.update()
|
||||
await clear_cache_for_account(user)
|
||||
await UserSession.objects.filter(user=user).delete()
|
||||
response.delete_cookie("access_token")
|
||||
response.delete_cookie("expiry")
|
||||
response.delete_cookie("rememberme")
|
||||
response.delete_cookie("rememberme_token")
|
||||
return {"message": "Password updated successfully"}
|
||||
|
||||
Reference in New Issue
Block a user