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('原密码仍可正常登录')
+ })
})