diff --git a/src/components/MyAccountSettings.tsx b/src/components/MyAccountSettings.tsx index ab5a929..089b1ac 100644 --- a/src/components/MyAccountSettings.tsx +++ b/src/components/MyAccountSettings.tsx @@ -57,7 +57,7 @@ export function MyAccountSettings() { :

使用完整密码会话后可查看和修改个人资料。

} -

忘记密码:请联系管理员生成一次性登录密码。用它登录后必须立即设置新密码(强制改密),原密码随生成即失效。

+

忘记密码:请联系管理员生成一次性登录密码。用它登录后必须立即设置新密码(强制改密);生成后原密码仍可正常登录,用原密码登录会使未使用的一次性登录密码作废。

{notice &&
{notice}
} {err &&
{err}
} diff --git a/src/components/adminSections.tsx b/src/components/adminSections.tsx index c4e2ec6..ce3e353 100644 --- a/src/components/adminSections.tsx +++ b/src/components/adminSections.tsx @@ -47,7 +47,7 @@ export function UsersPanel() { try { const out = await api.adminIssueOneTimePassword(u.owner) setGeneratedCredential({ owner: u.owner, password: out.oneTimePassword, kind: 'one-time' }) - setNotice(`已为 ${u.owner} 生成一次性登录密码,原密码已失效。该用户用它登录后必须立即设置新密码(强制改密)。`) + setNotice(`已为 ${u.owner} 生成一次性登录密码,原密码仍可正常登录。该用户用一次性密码登录后必须立即设置新密码(强制改密);若改用原密码登录,未使用的一次性登录密码随即作废,且不会被要求改密。`) await refresh() } catch (e) { setErr(String(e)) } finally { setBusy(false) } } @@ -74,7 +74,7 @@ export function UsersPanel() { } {err &&
{err}
} - {me?.isAdmin &&

用户忘记密码时,点该用户行的「生成一次性登录密码」:原密码立即失效,用户用一次性密码登录后必须设置新密码才能继续。

} + {me?.isAdmin &&

用户忘记密码时,点该用户行的「生成一次性登录密码」:生成不会使原密码失效。用户用一次性密码登录后必须设置新密码才能继续;若用户改用原密码登录,未使用的一次性登录密码随即作废,且不会被要求改密。

} diff --git a/test/one-time-password.test.ts b/test/one-time-password.test.ts index cd75905..e50f08b 100644 --- a/test/one-time-password.test.ts +++ b/test/one-time-password.test.ts @@ -56,6 +56,12 @@ describe('管理员用户管理:唯一忘记密码动作', () => { expect(panel.match(/aria-label="一次性密码"/g)).toHaveLength(1) expect(panel).not.toMatch(/localStorage|sessionStorage|clipboard/) }) + it('文案标明生成不使原密码失效;原密码登录则作废未用的一次性密码且不强制改密', () => { + expect(panel).not.toMatch(/原密码(已|立即|随生成即)失效/) + expect(panel).toContain('原密码仍可正常登录') + expect(panel).toContain('未使用的一次性登录密码随即作废') + expect(panel).toContain('不会被要求改密') + }) }) describe('登录页:仅用户名 + 密码', () => { @@ -94,4 +100,8 @@ describe('我的账号:无恢复提案确认', () => { expect(settings).toContain('强制改密') expect(settings).not.toMatch(/由本人确认|重新生成设密能力|兑换/) }) + it('不声称生成一次性登录密码会使原密码失效', () => { + expect(settings).not.toMatch(/原密码(已|立即|随生成即)失效/) + expect(settings).toContain('原密码仍可正常登录') + }) })
用户名显示名角色状态密码设置于