login #1

Merged
v4l3n71n merged 10 commits from login into master 2023-10-12 21:57:27 +00:00
3 changed files with 8 additions and 7 deletions
Showing only changes of commit e8d2670024 - Show all commits

View File

@ -6,17 +6,17 @@ from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt from jose import JWTError, jwt
from passlib.context import CryptContext from passlib.context import CryptContext
from .models import users from .models import users, token
fake_users = [ fake_users = [
# password foo # password foo
{'id': 1, 'username': 'admin', 'password': '$2b$12$N.i74Kle18n5Toxhas.rVOjZreVC2WM34fCidNDyhSNgxVlbKwX7i', {'id': 1, 'username': 'admin', 'password': '$2b$12$N.i74Kle18n5Toxhas.rVOjZreVC2WM34fCidNDyhSNgxVlbKwX7i',
'roles': 'Admin' 'roles': 'Admin', 'disabled': False
}, },
# password bar # password bar
{'id': 2, 'username': 'client', 'password': '$2b$12$KUgpw1m0LF/s9NS1ZB5rRO2cA5D13MqRm56ab7ik2ixftXW/aqEyq', {'id': 2, 'username': 'client', 'password': '$2b$12$KUgpw1m0LF/s9NS1ZB5rRO2cA5D13MqRm56ab7ik2ixftXW/aqEyq',
'roles':'User'} 'roles':'User', 'disabled':False}
] ]
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7" SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
@ -56,18 +56,18 @@ def create_access_token(data: dict, expires_delta: timedelta | None = None):
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM) encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt return encoded_jwt
async def get_current_user(token: Annotated[str, Depends(oauth2_scheme)]): async def get_current_user(token_str: Annotated[str, Depends(oauth2_scheme)]):
credentials_exception = HTTPException( credentials_exception = HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, status_code=status.HTTP_401_UNAUTHORIZED,
detail="Could not validate credentials", detail="Could not validate credentials",
headers={"WWW-Authenticate": "Bearer"}, headers={"WWW-Authenticate": "Bearer"},
) )
try: try:
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM]) payload = jwt.decode(token_str, SECRET_KEY, algorithms=[ALGORITHM])
username: str = payload.get("sub") username: str = payload.get("sub")
if username is None: if username is None:
raise credentials_exception raise credentials_exception
token_data = TokenData(username=username) token_data = token.TokenData(username=username)
except JWTError: except JWTError:
raise credentials_exception raise credentials_exception
user = get_user(fake_users, username=token_data.username) user = get_user(fake_users, username=token_data.username)

View File

@ -6,6 +6,7 @@ class User(BaseModel):
username: str username: str
password: str password: str
roles: str roles: str
disabled: bool
class UserInDB(User): class UserInDB(User):
password: str password: str

View File

@ -12,4 +12,4 @@ async def read_users():
@router.get("/users/me", response_model=users.User) @router.get("/users/me", response_model=users.User)
async def read_users_me(current_user: Annotated[users.User, Depends(get_current_active_user)]): async def read_users_me(current_user: Annotated[users.User, Depends(get_current_active_user)]):
return [{"item_id": "Foo", "owner": current_user.username}] return current_user