register works!
This commit is contained in:
@ -43,22 +43,23 @@ async def login_for_access_token(
|
|||||||
|
|
||||||
@router.post("/register")
|
@router.post("/register")
|
||||||
async def register(
|
async def register(
|
||||||
user_data: Annotated[schemas.UserRegister, Depends()],
|
user_data: schemas.UserRegister,
|
||||||
db: Annotated[Session, Depends(get_db)],
|
db: Annotated[Session, Depends(get_db)],
|
||||||
) -> schemas.User:
|
) -> schemas.User:
|
||||||
user = services.get_user_by_username(db, user_data.username)
|
user = services.get_user_by_username(db, user_data.username)
|
||||||
if user:
|
if user:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
detail="User with this username already exists",
|
detail="User with this username already exists",
|
||||||
headers={"WWW-Authenticate": "Bearer"},
|
headers={"WWW-Authenticate": "Bearer"},
|
||||||
)
|
)
|
||||||
user = services.create_user(
|
if user_data.password != user_data.password2:
|
||||||
db=db,
|
raise HTTPException(
|
||||||
username=user_data.username,
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
plain_password=user_data.password,
|
detail="Passwords do not match",
|
||||||
name=user_data.name,
|
headers={"WWW-Authenticate": "Bearer"},
|
||||||
)
|
)
|
||||||
|
user = services.create_user(db=db, user_data=user_data)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,8 @@ class UserInDB(User):
|
|||||||
|
|
||||||
|
|
||||||
class UserRegister(User):
|
class UserRegister(User):
|
||||||
plain_password: str
|
password: str
|
||||||
|
password2: str
|
||||||
|
|
||||||
|
|
||||||
class Token(BaseModel):
|
class Token(BaseModel):
|
||||||
|
|||||||
@ -53,17 +53,17 @@ def create_access_token(data: dict, expires_delta: Union[timedelta, None] = None
|
|||||||
return encoded_jwt
|
return encoded_jwt
|
||||||
|
|
||||||
|
|
||||||
def create_user(
|
def create_user(db: Session, user_data: schemas.UserRegister) -> schemas.UserInDB:
|
||||||
db: Session, username: str, plain_password: str, name: Union[str, None] = None
|
|
||||||
) -> schemas.User:
|
|
||||||
user = models.User(
|
user = models.User(
|
||||||
username=username,
|
username=user_data.username,
|
||||||
name=name,
|
name=user_data.name,
|
||||||
hashed_password=get_password_hash(plain_password),
|
hashed_password=get_password_hash(user_data.password),
|
||||||
)
|
)
|
||||||
db.add(user)
|
db.add(user)
|
||||||
db.commit()
|
db.commit()
|
||||||
return schemas.User(user)
|
return schemas.UserInDB(
|
||||||
|
username=user.username, name=user.name, hashed_password=user.hashed_password
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def get_current_user(
|
async def get_current_user(
|
||||||
|
|||||||
@ -4,4 +4,4 @@ pydantic
|
|||||||
sqlalchemy
|
sqlalchemy
|
||||||
psycopg2-binary
|
psycopg2-binary
|
||||||
python-jose[cryptography]
|
python-jose[cryptography]
|
||||||
passlib[bcrypt]
|
passlib[all]
|
||||||
10
dev.yml
10
dev.yml
@ -2,6 +2,7 @@ services:
|
|||||||
backend:
|
backend:
|
||||||
build:
|
build:
|
||||||
context: backend
|
context: backend
|
||||||
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "8000"
|
- "8000"
|
||||||
env_file:
|
env_file:
|
||||||
@ -15,6 +16,7 @@ services:
|
|||||||
frontend:
|
frontend:
|
||||||
build:
|
build:
|
||||||
context: frontend
|
context: frontend
|
||||||
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "3000"
|
- "3000"
|
||||||
env_file:
|
env_file:
|
||||||
@ -24,6 +26,7 @@ services:
|
|||||||
- ./frontend/app:/app:z
|
- ./frontend/app:/app:z
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx:1.25.4-alpine
|
image: nginx:1.25.4-alpine
|
||||||
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- ./nginx/dev.conf:/etc/nginx/conf.d/default.conf:ro
|
- ./nginx/dev.conf:/etc/nginx/conf.d/default.conf:ro
|
||||||
- ./static:/static
|
- ./static:/static
|
||||||
@ -34,14 +37,17 @@ services:
|
|||||||
- "80:80"
|
- "80:80"
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:16.2-alpine
|
image: postgres:16.2-alpine
|
||||||
restart: always
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- ./postgres_data:/var/lib/postgresql/data/
|
- ./postgres_data:/var/lib/postgresql/data/
|
||||||
env_file:
|
env_file:
|
||||||
- path: ./env/postgres.env
|
- path: ./env/postgres.env
|
||||||
required: true
|
required: true
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "pg_isready -d ${POSTGRES_DB} --user ${POSTGRES_USER}"]
|
test:
|
||||||
|
["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} --user $${POSTGRES_USER}"]
|
||||||
interval: 2s
|
interval: 2s
|
||||||
timeout: 2s
|
timeout: 2s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|||||||
Reference in New Issue
Block a user