diff --git a/routers/auth.py b/routers/auth.py index 7b41b8d..6c28901 100644 --- a/routers/auth.py +++ b/routers/auth.py @@ -85,11 +85,6 @@ def login(user_data: user_schemas.UserLogin, request: Request, response: Respons } } -@router.post("/logout") -def logout(response: Response): - """Logout by clearing the JWT cookie""" - response.delete_cookie(key="access_token") - return {"message": "Logout successful"} def verify_jwt_token(token: str): """Verify and decode a JWT token""" diff --git a/routers/me.py b/routers/me.py index 256ef81..32dfbea 100644 --- a/routers/me.py +++ b/routers/me.py @@ -42,4 +42,60 @@ def get_me(request: Request, db: db_dependency): status_code=status.HTTP_401_UNAUTHORIZED, detail="User not found" ) - return db_user \ No newline at end of file + return db_user + + +@router.post("/logout") +def logout(request: Request,response: Response): + """Logout by clearing the JWT cookie""" + + get_token = request.cookies.get("access_token") + if not get_token: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Not logged in" + ) + + response.delete_cookie(key="access_token") + return {"message": "Logout successful"} + +@router.delete("/delete-me") +def delete_me(request: Request, db: db_dependency): + """Delete current authenticated user""" + token = request.cookies.get("access_token") + + if not token: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Not logged in" + ) + + try: + payload = jwt.decode(token, auth.SECRET_KEY, algorithms=[auth.ALGORITHM]) + user_id: str = str(payload.get("sub")) + if user_id is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Not logged in" + ) + except JWTError: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Could not validate credentials" + ) + +## User retrieval and deletion + user = db.query(models.User).filter(models.User.id == int(user_id)).first() + if user is None: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="User not found" + ) + + db.delete(user) + db.commit() + + ## Logout user by clearing cookie + request.cookies.clear() + + return {"message": "User deleted successfully"} \ No newline at end of file