tranny / App /Users /UserRoutes.py
Mbonea's picture
jwt works the routes are secured!
591d823
raw
history blame
1.78 kB
from fastapi import APIRouter, Request, Depends, HTTPException
from .Schemas import BaseRequest, UserSchema
from pydantic import BaseModel
from .Model import User
from sqlalchemy import and_
from fastapi_jwt_auth import AuthJWT
class Settings(BaseModel):
authjwt_secret_key: str = "secret"
user_router = APIRouter(tags=["User"])
@AuthJWT.load_config
def get_config():
return Settings()
@user_router.post("/user/register")
async def register_user(user: BaseRequest):
data = await User.objects.filter(email=user.email).first()
if data != None:
return {"code": 400, "message": "user exists", "payload": None}
else:
user.hash_password()
sample = await User.objects.create(**user.dict())
return {"code": 200, "message": "success", "payload": None}
async def get_token_owner(Authorize: AuthJWT = Depends()):
Authorize.jwt_required()
current_user = Authorize.get_jwt_subject()
user = await User.objects.filter(id=int(current_user)).first()
if not user:
raise HTTPException(status_code=401, detail="Invalid Credentials")
return UserSchema.from_orm(user)
@user_router.post("/user/login")
async def register_user(user: BaseRequest, Authorize: AuthJWT = Depends()):
db_user = await User.objects.filter(email=user.email).first()
if not db_user:
raise HTTPException(status_code=401, detail="Invalid Credentials")
if not db_user.verify_password(user.password):
raise HTTPException(status_code=401, detail="Invalid Credentials")
user = UserSchema.from_orm(db_user)
access_token = Authorize.create_access_token(subject=user.id)
return {
"code": 200,
"message": "success",
"payload": db_user.__dict__,
"access_token": access_token,
}