From 65ce011db796c7f98e5e882cc00714e8b38e50a1 Mon Sep 17 00:00:00 2001 From: zzhyyyyy <2685922758@qq.com> Date: Tue, 23 Jun 2026 19:38:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(auth):=20=E9=BB=98=E8=AE=A4=E6=98=B5?= =?UTF-8?q?=E7=A7=B0=E5=8A=A0=E2=80=9C=E7=94=A8=E6=88=B7=E2=80=9D=E5=89=8D?= =?UTF-8?q?=E7=BC=80(=E7=94=A8=E6=88=B7+9=20=E4=BD=8D=E9=9A=8F=E6=9C=BA?= =?UTF-8?q?=E4=B8=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新用户注册即分配的默认昵称由 9 位字母数字随机串改为“用户”+9 位随机串(如 用户aB3xK9mP2),更友好可读;长度 11 仍在 nickname(64)与改名上限(20)内。同步更新 test_login_assigns_username_and_nickname 断言。 Co-Authored-By: Claude Opus 4.8 --- app/repositories/user.py | 9 ++++++--- tests/test_auth.py | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/repositories/user.py b/app/repositories/user.py index 7753e33..7397d44 100644 --- a/app/repositories/user.py +++ b/app/repositories/user.py @@ -22,7 +22,8 @@ _USERNAME_FIRST = "23456789" _USERNAME_DIGITS = "0123456789" _USERNAME_LEN = 11 -# 默认昵称 = 9 位大小写字母 + 数字随机串(创建时给,用户可后续改;不要求唯一)。 +# 默认昵称 = "用户" + 9 位大小写字母 + 数字随机串(创建时给,用户可后续改;不要求唯一)。 +_NICKNAME_PREFIX = "用户" _NICKNAME_ALPHABET = string.ascii_letters + string.digits _NICKNAME_LEN = 9 @@ -35,8 +36,10 @@ def _gen_username() -> str: def _gen_nickname() -> str: - """随机一个 9 位字母+数字的默认昵称。""" - return "".join(secrets.choice(_NICKNAME_ALPHABET) for _ in range(_NICKNAME_LEN)) + """默认昵称 = "用户" + 9 位字母+数字随机串。""" + return _NICKNAME_PREFIX + "".join( + secrets.choice(_NICKNAME_ALPHABET) for _ in range(_NICKNAME_LEN) + ) def get_user_by_username(db: Session, username: str) -> User | None: diff --git a/tests/test_auth.py b/tests/test_auth.py index f9a6be1..390f488 100644 --- a/tests/test_auth.py +++ b/tests/test_auth.py @@ -211,7 +211,7 @@ def test_sms_gc_purges_stale_only(monkeypatch) -> None: # ============================ 用户名 / 默认昵称 ============================ def test_login_assigns_username_and_nickname(client) -> None: - """新用户创建即分配:11 位纯数字 username(首位非 0/1,与手机号天然区分)+ 9 位字母数字默认昵称。""" + """新用户创建即分配:11 位纯数字 username(首位非 0/1,与手机号天然区分)+ "用户"+9 位字母数字默认昵称。""" phone = "13600136000" client.post("/api/v1/auth/sms/send", json={"phone": phone}) r = client.post("/api/v1/auth/sms/login", json={"phone": phone, "code": "123456"}) @@ -223,7 +223,9 @@ def test_login_assigns_username_and_nickname(client) -> None: assert uname[0] not in ("0", "1") # 无前导 0、与手机号(均以 1 开头)区分 nick = user["nickname"] - assert nick and len(nick) == 9 and nick.isalnum() # 9 位字母+数字 + assert nick.startswith("用户") # "用户" 前缀 + suffix = nick.removeprefix("用户") + assert len(suffix) == 9 and suffix.isalnum() # 后接 9 位字母+数字 def test_username_stable_and_unique_on_relogin() -> None: -- 2.52.0