fix(auth): allow registration without display name
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user