diff --git a/apps/backend/src/services/worker-platform/mappers.ts b/apps/backend/src/services/worker-platform/mappers.ts index 257fb1bb..f2efc799 100644 --- a/apps/backend/src/services/worker-platform/mappers.ts +++ b/apps/backend/src/services/worker-platform/mappers.ts @@ -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 { diff --git a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts index fa2adbd3..4a3ae0c7 100644 --- a/apps/backend/src/services/worker-platform/worker-platform-service.test.ts +++ b/apps/backend/src/services/worker-platform/worker-platform-service.test.ts @@ -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('排行榜打手名称仅展示首字符', () => { diff --git a/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx b/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx index 8f14302c..c3c083c5 100644 --- a/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx +++ b/apps/frontend/src/pages/admin/panels/WorkersPanel.tsx @@ -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('密码需包含英文字母和数字')), }, ]} > - + diff --git a/apps/frontend/src/utils/worker-password.ts b/apps/frontend/src/utils/worker-password.ts index 977adbff..f6415f20 100644 --- a/apps/frontend/src/utils/worker-password.ts +++ b/apps/frontend/src/utils/worker-password.ts @@ -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) ) } diff --git a/apps/frontend/tests/worker-password.test.ts b/apps/frontend/tests/worker-password.test.ts new file mode 100644 index 00000000..078b8d17 --- /dev/null +++ b/apps/frontend/tests/worker-password.test.ts @@ -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) +})