Files
chongming-plugins/auth/router/register.py
T

94 lines
2.7 KiB
Python
Raw Normal View History

2026-07-23 17:45:44 +08:00
import time
from datetime import datetime
from sqlalchemy import select
from chongming_worker import rpc_method
from chongming_password import hash_password
from ..models.pydantic import (
RegisterPostRequest,
RegisterPostResponse
)
from ..models.auth import Users
@rpc_method(
subject="auth.register",
method="POST",
summary="用户注册",
response_model=RegisterPostResponse,
)
async def register(register_post_request: RegisterPostRequest) -> RegisterPostResponse:
from ..global_var import db
if db is None:
raise RuntimeError("Database not initialized")
username = register_post_request.username.strip()
email = register_post_request.email.strip()
full_name = register_post_request.full_name.strip() or None
phone = register_post_request.phone.strip() or None
# 校验必填字段
if not username:
return RegisterPostResponse(
result="fail",
message="用户名不能为空",
timestamp=time.time()
)
if not email:
return RegisterPostResponse(
result="fail",
message="邮箱不能为空",
timestamp=time.time()
)
if not register_post_request.password:
return RegisterPostResponse(
result="fail",
message="密码不能为空",
timestamp=time.time()
)
async with db.get_session() as session:
# 检查用户名是否已存在
stmt = select(Users).filter_by(username=username)
result = await session.execute(stmt)
if result.scalar_one_or_none() is not None:
return RegisterPostResponse(
result="fail",
message="用户名已存在",
timestamp=time.time()
)
# 检查邮箱是否已存在
stmt = select(Users).filter_by(email=email)
result = await session.execute(stmt)
if result.scalar_one_or_none() is not None:
return RegisterPostResponse(
result="fail",
message="邮箱已被注册",
timestamp=time.time()
)
# 创建新用户
user = Users(
username=username,
hashed_password=hash_password(register_post_request.password),
email=email,
full_name=full_name,
phone=phone,
created_at=datetime.now(),
updated_at=datetime.now(),
)
session.add(user)
await session.commit()
await session.refresh(user)
return RegisterPostResponse(
result="success",
message="注册成功",
user_id=user.id,
timestamp=time.time()
)