From 37803ceeedf6c8af2e7503cda5cd8b7023978fcd Mon Sep 17 00:00:00 2001 From: qian Date: Sat, 5 Sep 2026 10:08:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(auth):=E4=BF=AE=E5=A4=8D=E9=87=8D=E7=BD=AE?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E6=B2=A1=E6=9C=89=E6=B8=85=E9=99=A4=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/logic/tenant/member.go | 10 ++++++++-- web/tenant/src/views/team/MemberDetailPage.vue | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/logic/tenant/member.go b/internal/logic/tenant/member.go index 28a2b94..9be1fe9 100644 --- a/internal/logic/tenant/member.go +++ b/internal/logic/tenant/member.go @@ -865,11 +865,17 @@ func (s *sTenant) ResetMemberPassword(ctx context.Context, req *v1.TenantMemberR return nil, err } + // 重置密码时同步清空失败计数与锁定:成员多半是因忘记密码连错被锁才找管理员重置, + // 只改哈希不清锁会导致新密码在锁定期内依然登不进(与 admin 端/邮箱自助重置行为对齐)。 + // 注意必须用 map 而非 do 结构体:do 字段为 interface{},nil 表示「未设置」会被跳过, + // locked_until 置 NULL 必须通过 map 显式传递。 _, err = dao.TntUsers.Ctx(ctx). Where("id", memberID). Where("tenant_id", tenantID). - Data(do.TntUsers{ - PasswordHash: passwordHash, + Data(map[string]interface{}{ + "password_hash": passwordHash, + "failed_attempts": 0, + "locked_until": nil, }).Update() if err != nil { return nil, err diff --git a/web/tenant/src/views/team/MemberDetailPage.vue b/web/tenant/src/views/team/MemberDetailPage.vue index 426ca0b..33921e2 100644 --- a/web/tenant/src/views/team/MemberDetailPage.vue +++ b/web/tenant/src/views/team/MemberDetailPage.vue @@ -472,7 +472,7 @@ onMounted(() => { {{ statusLabel[member.status] || member.status }} -

@{{ member.username }}

+

@{{ authStore.tenant?.code }}