File size: 1,827 Bytes
591d823 252d749 591d823 9ad8e24 252d749 591d823 252d749 591d823 252d749 591d823 252d749 591d823 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
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"
authjwt_access_token_expires: bool = False
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,
}
|