summaryrefslogtreecommitdiff
path: root/app/routes/register.py
diff options
context:
space:
mode:
authorl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-04-02 08:39:42 +0300
committerl3wdfut4pwr <l3wdfut4pwr@gmail.com>2026-04-02 08:39:42 +0300
commit69e67d049411ceb5c839386b020ce2c77ffc2847 (patch)
tree9ec561545b64b57796ef2fd5f3fbd02239965cc1 /app/routes/register.py
parent7e41576035cd9f0004255a7490e6691c6d989ff6 (diff)
minor improvements
Diffstat (limited to 'app/routes/register.py')
-rw-r--r--app/routes/register.py93
1 files changed, 42 insertions, 51 deletions
diff --git a/app/routes/register.py b/app/routes/register.py
index fb8ec3d..ffcd336 100644
--- a/app/routes/register.py
+++ b/app/routes/register.py
@@ -1,10 +1,11 @@
import re
from typing import Optional
-from fastapi import APIRouter, Depends, HTTPException
+from fastapi import APIRouter, Depends, HTTPException, Response
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
+from app.auth.jwt import create_access_token, create_refresh_token
from app.models.user import User
from app.schemas.user import UserCreate, UserRead
from app.utils.db import get_async_session
@@ -16,21 +17,15 @@ router = APIRouter(tags=["auth"])
@router.post("/register", response_model=UserRead)
async def register_user(
- user: UserCreate, session: AsyncSession = Depends(get_async_session)
+ user: UserCreate,
+ response: Response,
+ session: AsyncSession = Depends(get_async_session),
):
logger.debug("Register request received")
email: Optional[str] = user.email.strip() if user.email else None
-
logger.debug("Normalized email value: {}", email)
-
- logger.info(
- "Registration attempt | username={} email={}",
- user.username,
- email,
- )
-
- logger.debug("Validating password complexity")
+ logger.info("Registration attempt | username={} email={}", user.username, email)
if not (
re.search(r"[A-Za-z]", user.password)
@@ -41,14 +36,18 @@ async def register_user(
"Registration failed | password complexity requirement not met | username={}",
user.username,
)
+ raise HTTPException(
+ status_code=400,
+ detail={
+ "field": "password",
+ "message": "Попробуйте сочетание букв, цифр и символов.",
+ },
+ )
- logger.debug("Checking if username already exists")
result = await session.execute(select(User).where(User.username == user.username))
- existing_username = result.scalars().first()
- if existing_username:
+ if result.scalars().first():
logger.warning(
- "Registration failed | username already exists | username={}",
- user.username,
+ "Registration failed | username already exists | username={}", user.username
)
raise HTTPException(
status_code=400,
@@ -56,55 +55,23 @@ async def register_user(
)
if email:
- logger.debug("Checking if email already exists")
result = await session.execute(select(User).where(User.email == email))
- existing_email = result.scalars().first()
- if existing_email:
+ if result.scalars().first():
logger.warning(
- "Registration failed | email already exists | email={}",
- email,
+ "Registration failed | email already exists | email={}", email
)
raise HTTPException(
status_code=400,
detail={"field": "email", "message": "Адрес уже занят."},
)
- logger.debug("Starting password hashing")
-
hashed_password = hash_password(user.password)
- logger.debug("Password hashing completed")
-
- logger.debug("Creating new user")
-
- new_user = User(
- username=user.username,
- email=email,
- password=hashed_password,
- )
-
- logger.debug("User model created | username={}", user.username)
-
- logger.debug("Adding user to session")
-
+ new_user = User(username=user.username, email=email, password=hashed_password)
session.add(new_user)
-
- logger.debug("Preparing to commit database transaction")
-
await session.commit()
-
- logger.debug("Transaction committed successfully")
-
- logger.debug("Refreshing user instance from database")
-
await session.refresh(new_user)
- logger.debug(
- "User instance refreshed | id={} username={}",
- new_user.id,
- new_user.username,
- )
-
logger.success(
"User successfully registered | id={} username={} email={}",
new_user.id,
@@ -112,4 +79,28 @@ async def register_user(
new_user.email,
)
+ access_token = create_access_token(
+ {"sub": str(new_user.id), "token_version": new_user.token_version}
+ )
+ refresh_token = create_refresh_token(
+ {"sub": str(new_user.id), "token_version": new_user.token_version}
+ )
+
+ response.set_cookie(
+ key="access_token",
+ value=access_token,
+ httponly=True,
+ secure=False,
+ samesite="lax",
+ max_age=60 * 60,
+ )
+ response.set_cookie(
+ key="refresh_token",
+ value=refresh_token,
+ httponly=True,
+ secure=False,
+ samesite="lax",
+ max_age=30 * 24 * 60 * 60,
+ )
+
return new_user