🛂 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
|
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]:
|
async def get_from_redis(key: str) -> Union[None, User]:
|
||||||
user = await redis.get(key)
|
user = await redis.get(key)
|
||||||
if user is None:
|
if user is None:
|
||||||
|
|||||||
@@ -127,3 +127,8 @@ class GameSession(BaseModel):
|
|||||||
game_id: str
|
game_id: str
|
||||||
players: list[GamePlayer | None]
|
players: list[GamePlayer | None]
|
||||||
answers: list[GameAnser1 | 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.auth import *
|
||||||
from classquiz.config import redis
|
from classquiz.config import redis
|
||||||
|
from classquiz.cache import clear_cache_for_account
|
||||||
from classquiz.db.models import *
|
from classquiz.db.models import *
|
||||||
from classquiz.emails import send_register_email
|
from classquiz.emails import send_register_email
|
||||||
|
|
||||||
@@ -115,3 +116,18 @@ async def verify_user(verify_key: str):
|
|||||||
user.verify_key = None
|
user.verify_key = None
|
||||||
await user.update()
|
await user.update()
|
||||||
return RedirectResponse(url="/account/login?verified=true")
|
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