From 7281477269910956d8f12a6bf8e08610ec21ca27 Mon Sep 17 00:00:00 2001 From: bdrtr Date: Mon, 5 May 2025 14:31:25 +0300 Subject: [PATCH] fixed token problem --- auth/models.py | 13 +++++++++---- auth/router.py | 14 +++++++------- requirements.txt | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 11 deletions(-) create mode 100644 requirements.txt diff --git a/auth/models.py b/auth/models.py index ce3a3a4..1608fee 100644 --- a/auth/models.py +++ b/auth/models.py @@ -42,6 +42,12 @@ class User(BaseModel): class UserInDb(User): hashed_password : str | None = None +class UserPublic(BaseModel): + username : str | None = None + role : Role | None = None + status : Status | None = None + user_id : int | None = None + fake_db = { "bedir": { @@ -75,7 +81,6 @@ def get_password_hash(password: str) -> str: return pwd_context.hash(password) def authenticate_user(fake_db, username: str, password: str) -> UserInDb | bool: - print("username", username) user = fake_db.get(username) if not user: return False @@ -101,7 +106,7 @@ def get_user(db, username: str) -> UserInDb | None: return UserInDb(**user_dict) return None -def get_current_user(token: Annotated[str, Depends(oauth2_scheme)]) -> UserInDb | None: +def get_current_user(token: Annotated[str, Depends(oauth2_scheme)]) -> UserPublic | None: credentials_exception = HTTPException( status_code=401, detail="Burda bir hata var", @@ -110,6 +115,7 @@ def get_current_user(token: Annotated[str, Depends(oauth2_scheme)]) -> UserInDb try: payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) token_data = TokenData(**payload) + token_data.username = payload.get("sub") username : str = token_data.username if username is None: raise credentials_exception @@ -125,11 +131,10 @@ def get_current_user(token: Annotated[str, Depends(oauth2_scheme)]) -> UserInDb async def get_current_active_user( current_user : Annotated[UserInDb, Depends(get_current_user)] -) -> UserInDb | None: +) -> UserPublic | None: if current_user.status == Status.banned: raise HTTPException(status_code=400, detail="Inactive user") - print("current_user", current_user) return current_user """ diff --git a/auth/router.py b/auth/router.py index 849435b..39110e2 100644 --- a/auth/router.py +++ b/auth/router.py @@ -1,6 +1,6 @@ -from fastapi import APIRouter, Depends, HTTPException -from .models import UserInDb, User, Role, Token -from .models import get_current_active_user, authenticate_user, create_access_token , fake_db +from fastapi import APIRouter, Depends, HTTPException, status +from .models import UserInDb, User, Role, Token, UserPublic +from .models import get_current_active_user, authenticate_user, create_access_token , fake_db, get_current_user from datetime import timedelta, datetime, timezone from ..config import ACCESS_TOKEN_EXPIRE_MINUTES from typing import Annotated, Optional @@ -17,11 +17,11 @@ router = APIRouter( @router.get("/me") async def read_users_me( current_user: Annotated[User, Depends(get_current_active_user)], -): +) -> UserPublic: return current_user -def ADMIN(current_user: Annotated[UserInDb, Depends(get_current_active_user)]): +def ADMIN(current_user: Annotated[UserInDb, Depends(get_current_user)]): if current_user.role != Role.admin: raise HTTPException(status_code=400, detail="You are not admin") return current_user @@ -39,7 +39,7 @@ async def login_for_access_token( user = authenticate_user(fake_db, form_data.username, form_data.password) if not user: raise HTTPException( - status_code=400, + status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect username or password", headers={"WWW-Authenticate": "Bearer"}, ) @@ -47,4 +47,4 @@ async def login_for_access_token( access_token = create_access_token( data={"sub": user['username'], "role": user['role'], 'status': user['status']}, expires_delta=access_token_expires ) - return {"access_token": access_token, "token_type": "bearer"} \ No newline at end of file + return Token(access_token=access_token, token_type="bearer") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5a6d67c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,40 @@ +annotated-types==0.7.0 +anyio==4.9.0 +certifi==2025.4.26 +click==8.1.8 +dnspython==2.7.0 +email_validator==2.2.0 +fastapi==0.115.12 +fastapi-cli==0.0.7 +greenlet==3.2.1 +h11==0.16.0 +httpcore==1.0.9 +httptools==0.6.4 +httpx==0.28.1 +idna==3.10 +Jinja2==3.1.6 +markdown-it-py==3.0.0 +MarkupSafe==3.0.2 +mdurl==0.1.2 +passlib==1.7.4 +psycopg2-binary==2.9.10 +pydantic==2.11.4 +pydantic_core==2.33.2 +Pygments==2.19.1 +PyJWT==2.10.1 +python-dotenv==1.1.0 +python-multipart==0.0.20 +PyYAML==6.0.2 +rich==14.0.0 +rich-toolkit==0.14.4 +shellingham==1.5.4 +sniffio==1.3.1 +SQLAlchemy==2.0.40 +starlette==0.46.2 +typer==0.15.3 +typing-inspection==0.4.0 +typing_extensions==4.13.2 +uvicorn==0.34.2 +uvloop==0.21.0 +watchfiles==1.0.5 +websockets==15.0.1