fix(auth): allow registration without display name
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 15s
Deploy / Deploy Staging (push) Has been skipped
Deploy / Deploy Production (push) Successful in 59s

This commit is contained in:
Xiaoxia AI
2026-06-21 16:24:21 +08:00
parent a1bc6eba90
commit a7f816fe5b
3 changed files with 22 additions and 2 deletions
+4 -2
View File
@@ -5,6 +5,8 @@ The route layer is intentionally thin: repository construction lives in
app.dependencies and authentication behavior lives in application use cases.
"""
from typing import Optional
from app.auth import AuthenticatedUser, get_current_user
from app.config import settings
from app.dependencies import get_auth_email_service, get_auth_session_store, get_user_repository
@@ -32,7 +34,7 @@ class RegisterRequest(BaseModel):
email: EmailStr
password: str
username: str
display_name: str
display_name: Optional[str] = None
class RegisterResponse(BaseModel):
@@ -99,7 +101,7 @@ async def register(
email=request.email,
password=request.password,
username=request.username,
display_name=request.display_name,
display_name=request.display_name or request.username,
)
)
if error or response is None:
+1
View File
@@ -25,6 +25,7 @@ const Register: React.FC = () => {
email: values.email,
username: values.username,
password: values.password,
display_name: values.username,
});
message.success('注册成功!请查收验证邮件。');
} catch (error: any) {
+17
View File
@@ -14,9 +14,11 @@ if str(API_ROOT) not in sys.path:
from app.api.routes.auth import (
PasswordResetRequestModel,
RegisterRequest,
ResetPasswordModel,
VerifyEmailRequestModel,
forgot_password,
register,
reset_password,
verify_email_post,
)
@@ -90,6 +92,21 @@ def test_register_use_case_hashes_password_and_normalizes_email():
assert password_hasher.verify_password("Password1", user.password_hash)
def test_register_route_defaults_display_name_to_username():
repo = InMemoryUserRepository()
response = asyncio.run(
register(
RegisterRequest(email="route@example.com", password="Password1", username="routeuser"),
repo,
DummyEmailService(),
)
)
assert response.display_name == "routeuser"
assert repo.find_by_email("route@example.com").display_name == "routeuser"
def test_login_use_case_returns_verifiable_jwt():
repo = InMemoryUserRepository()
session_store = DummySessionStore()