feat: 添加公开注册接口,修复邮箱验证链接路径
- 新增 POST /users/register 公开注册接口(无需验证码,直接创建用户) - 修复邮箱验证邮件中的链接路径(/verify-email → /users/verify-email) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6751a5c2b2
commit
49f7022c1b
@ -461,6 +461,48 @@ async def init_email_registration(
|
||||
return EmailRegisterInitResponse()
|
||||
|
||||
|
||||
@router.post("/register", response_model=RegisterSuccessResponse)
|
||||
async def register(
|
||||
req: UserCreateRequest,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
"""用户注册(公开接口,直接创建用户)"""
|
||||
# 检查用户名是否已存在
|
||||
result = await db.execute(select(User).filter(User.username == req.username))
|
||||
if result.scalar_one_or_none():
|
||||
raise HTTPException(status_code=400, detail="用户名已存在")
|
||||
|
||||
# 检查邮箱是否已被注册
|
||||
if req.email:
|
||||
result = await db.execute(select(User).filter(User.email == req.email))
|
||||
if result.scalar_one_or_none():
|
||||
raise HTTPException(status_code=400, detail="该邮箱已被注册")
|
||||
|
||||
# 检查手机号是否已被注册
|
||||
if req.phone:
|
||||
result = await db.execute(select(User).filter(User.phone == req.phone))
|
||||
if result.scalar_one_or_none():
|
||||
raise HTTPException(status_code=400, detail="该手机号已被注册")
|
||||
|
||||
# 创建用户
|
||||
hashed_pw = get_password_hash(req.password)
|
||||
new_user = User(
|
||||
username=req.username,
|
||||
nickname=req.nickname,
|
||||
email=req.email,
|
||||
phone=req.phone,
|
||||
password_hash=hashed_pw,
|
||||
role_id=req.role_id or 2,
|
||||
)
|
||||
db.add(new_user)
|
||||
await db.commit()
|
||||
await db.refresh(new_user)
|
||||
|
||||
return RegisterSuccessResponse(
|
||||
id=new_user.id, username=new_user.username, nickname=new_user.nickname
|
||||
)
|
||||
|
||||
|
||||
@router.get("/verify-email")
|
||||
async def verify_email(
|
||||
token: str = Query(..., description="验证令牌"),
|
||||
|
||||
@ -6,7 +6,7 @@ from email.mime.multipart import MIMEMultipart
|
||||
|
||||
def _build_verification_email(token: str) -> str:
|
||||
"""构建验证邮件HTML内容"""
|
||||
verify_url = f"{email_settings.base_url.rstrip('/')}/verify-email?token={token}"
|
||||
verify_url = f"{email_settings.base_url.rstrip('/')}/users/verify-email?token={token}"
|
||||
return f"""<!DOCTYPE html>
|
||||
<html>
|
||||
<head><meta charset="utf-8"></head>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user