调整接单密码强度规则

This commit is contained in:
yml2213
2026-08-20 16:19:44 +08:00
parent 218ee1577e
commit d2512ccb6b
5 changed files with 30 additions and 31 deletions
@@ -1483,7 +1483,7 @@ export function validateWorkerUsername(username: string) {
export function validateWorkerPassword(password: string) {
if (!isWorkerPasswordStrong(password)) {
throw createHttpError('接单密码至少 6 位,且必须包含大写字母、小写字母数字和标点符号', {
throw createHttpError('接单密码至少 8 位,且必须包含英文字母数字', {
statusCode: 400,
errorCode: 'worker_password_invalid',
})
@@ -1491,13 +1491,7 @@ export function validateWorkerPassword(password: string) {
}
export function isWorkerPasswordStrong(password: string): boolean {
return (
password.length >= 6 &&
/[A-Z]/.test(password) &&
/[a-z]/.test(password) &&
/\d/.test(password) &&
/[\p{P}\p{S}]/u.test(password)
)
return password.length >= 8 && /[a-zA-Z]/.test(password) && /\d/.test(password)
}
export function normalizeSessionVersion(value: unknown): number {
@@ -154,14 +154,14 @@ test('assertWorkerLoginAllowed allows active workers', () => {
assert.doesNotThrow(() => assertWorkerLoginAllowed(buildWorkerUserRow()))
})
test('接单密码必须包含大小写字母数字和标点符号', () => {
assert.equal(isWorkerPasswordStrong('Aa1234!'), true)
assert.equal(isWorkerPasswordStrong('aa1234!'), false)
assert.equal(isWorkerPasswordStrong('AA1234!'), false)
assert.equal(isWorkerPasswordStrong('Aaabcd!'), false)
assert.equal(isWorkerPasswordStrong('Aa123456'), false)
assert.equal(isWorkerPasswordStrong('Aa1!'), false)
assert.throws(() => validateWorkerPassword('Aa123456'), { errorCode: 'worker_password_invalid' })
test('接单密码至少八位且必须包含英文字母数字', () => {
assert.equal(isWorkerPasswordStrong('abc12345'), true)
assert.equal(isWorkerPasswordStrong('ABC12345'), true)
assert.equal(isWorkerPasswordStrong('12345678'), false)
assert.equal(isWorkerPasswordStrong('abcdefgh'), false)
assert.equal(isWorkerPasswordStrong('abc1234'), false)
assert.doesNotThrow(() => validateWorkerPassword('abc12345'))
assert.throws(() => validateWorkerPassword('12345678'), { errorCode: 'worker_password_invalid' })
})
test('排行榜打手名称仅展示首字符', () => {
@@ -427,20 +427,16 @@ export default function WorkersPanel() {
name="password"
rules={[
{ required: true, message: '请输入新密码' },
{ min: 6, message: '密码至少 6 位' },
{ min: 8, message: '密码至少 8 位' },
{
validator: (_, value) =>
!value ||
(/[A-Z]/.test(value) &&
/[a-z]/.test(value) &&
/\d/.test(value) &&
/[\p{P}\p{S}]/u.test(value))
!value || (/[a-zA-Z]/.test(value) && /\d/.test(value))
? Promise.resolve()
: Promise.reject(new Error('密码需包含大写字母、小写字母数字和标点符号')),
: Promise.reject(new Error('密码需包含英文字母数字')),
},
]}
>
<Input.Password placeholder="至少 6 位,包含大小写、数字和标点" />
<Input.Password placeholder="至少 8 位,包含英文和数字" />
</Form.Item>
</Form>
</Modal>
+4 -7
View File
@@ -1,15 +1,12 @@
export const WORKER_PASSWORD_MIN_LENGTH = 6
export const WORKER_PASSWORD_MIN_LENGTH = 8
export const WORKER_PASSWORD_RULE_MESSAGE =
'密码至少 6 位,且必须包含大写字母、小写字母、数字和标点符号'
export const WORKER_PASSWORD_RULE_MESSAGE = '密码至少 8 位,且必须包含英文字母和数字'
export function isWorkerPasswordStrong(value: unknown): boolean {
const password = String(value || '')
return (
password.length >= WORKER_PASSWORD_MIN_LENGTH &&
/[A-Z]/.test(password) &&
/[a-z]/.test(password) &&
/\d/.test(password) &&
/[\p{P}\p{S}]/u.test(password)
/[a-zA-Z]/.test(password) &&
/\d/.test(password)
)
}
@@ -0,0 +1,12 @@
import assert from 'node:assert/strict'
import test from 'node:test'
import { isWorkerPasswordStrong } from '../src/utils/worker-password.ts'
test('接单密码至少八位且必须包含英文字母和数字', () => {
assert.equal(isWorkerPasswordStrong('abc12345'), true)
assert.equal(isWorkerPasswordStrong('ABC12345'), true)
assert.equal(isWorkerPasswordStrong('12345678'), false)
assert.equal(isWorkerPasswordStrong('abcdefgh'), false)
assert.equal(isWorkerPasswordStrong('abc1234'), false)
})