调整接单密码强度规则
This commit is contained in:
@@ -1483,7 +1483,7 @@ export function validateWorkerUsername(username: string) {
|
|||||||
|
|
||||||
export function validateWorkerPassword(password: string) {
|
export function validateWorkerPassword(password: string) {
|
||||||
if (!isWorkerPasswordStrong(password)) {
|
if (!isWorkerPasswordStrong(password)) {
|
||||||
throw createHttpError('接单密码至少 6 位,且必须包含大写字母、小写字母、数字和标点符号', {
|
throw createHttpError('接单密码至少 8 位,且必须包含英文字母和数字', {
|
||||||
statusCode: 400,
|
statusCode: 400,
|
||||||
errorCode: 'worker_password_invalid',
|
errorCode: 'worker_password_invalid',
|
||||||
})
|
})
|
||||||
@@ -1491,13 +1491,7 @@ export function validateWorkerPassword(password: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function isWorkerPasswordStrong(password: string): boolean {
|
export function isWorkerPasswordStrong(password: string): boolean {
|
||||||
return (
|
return password.length >= 8 && /[a-zA-Z]/.test(password) && /\d/.test(password)
|
||||||
password.length >= 6 &&
|
|
||||||
/[A-Z]/.test(password) &&
|
|
||||||
/[a-z]/.test(password) &&
|
|
||||||
/\d/.test(password) &&
|
|
||||||
/[\p{P}\p{S}]/u.test(password)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function normalizeSessionVersion(value: unknown): number {
|
export function normalizeSessionVersion(value: unknown): number {
|
||||||
|
|||||||
@@ -154,14 +154,14 @@ test('assertWorkerLoginAllowed allows active workers', () => {
|
|||||||
assert.doesNotThrow(() => assertWorkerLoginAllowed(buildWorkerUserRow()))
|
assert.doesNotThrow(() => assertWorkerLoginAllowed(buildWorkerUserRow()))
|
||||||
})
|
})
|
||||||
|
|
||||||
test('接单密码必须包含大小写字母、数字和标点符号', () => {
|
test('接单密码至少八位且必须包含英文字母和数字', () => {
|
||||||
assert.equal(isWorkerPasswordStrong('Aa1234!'), true)
|
assert.equal(isWorkerPasswordStrong('abc12345'), true)
|
||||||
assert.equal(isWorkerPasswordStrong('aa1234!'), false)
|
assert.equal(isWorkerPasswordStrong('ABC12345'), true)
|
||||||
assert.equal(isWorkerPasswordStrong('AA1234!'), false)
|
assert.equal(isWorkerPasswordStrong('12345678'), false)
|
||||||
assert.equal(isWorkerPasswordStrong('Aaabcd!'), false)
|
assert.equal(isWorkerPasswordStrong('abcdefgh'), false)
|
||||||
assert.equal(isWorkerPasswordStrong('Aa123456'), false)
|
assert.equal(isWorkerPasswordStrong('abc1234'), false)
|
||||||
assert.equal(isWorkerPasswordStrong('Aa1!'), false)
|
assert.doesNotThrow(() => validateWorkerPassword('abc12345'))
|
||||||
assert.throws(() => validateWorkerPassword('Aa123456'), { errorCode: 'worker_password_invalid' })
|
assert.throws(() => validateWorkerPassword('12345678'), { errorCode: 'worker_password_invalid' })
|
||||||
})
|
})
|
||||||
|
|
||||||
test('排行榜打手名称仅展示首字符', () => {
|
test('排行榜打手名称仅展示首字符', () => {
|
||||||
|
|||||||
@@ -427,20 +427,16 @@ export default function WorkersPanel() {
|
|||||||
name="password"
|
name="password"
|
||||||
rules={[
|
rules={[
|
||||||
{ required: true, message: '请输入新密码' },
|
{ required: true, message: '请输入新密码' },
|
||||||
{ min: 6, message: '密码至少 6 位' },
|
{ min: 8, message: '密码至少 8 位' },
|
||||||
{
|
{
|
||||||
validator: (_, value) =>
|
validator: (_, value) =>
|
||||||
!value ||
|
!value || (/[a-zA-Z]/.test(value) && /\d/.test(value))
|
||||||
(/[A-Z]/.test(value) &&
|
|
||||||
/[a-z]/.test(value) &&
|
|
||||||
/\d/.test(value) &&
|
|
||||||
/[\p{P}\p{S}]/u.test(value))
|
|
||||||
? Promise.resolve()
|
? Promise.resolve()
|
||||||
: Promise.reject(new Error('密码需包含大写字母、小写字母、数字和标点符号')),
|
: Promise.reject(new Error('密码需包含英文字母和数字')),
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
>
|
>
|
||||||
<Input.Password placeholder="至少 6 位,包含大小写、数字和标点" />
|
<Input.Password placeholder="至少 8 位,包含英文和数字" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</Form>
|
</Form>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
export const WORKER_PASSWORD_MIN_LENGTH = 6
|
export const WORKER_PASSWORD_MIN_LENGTH = 8
|
||||||
|
|
||||||
export const WORKER_PASSWORD_RULE_MESSAGE =
|
export const WORKER_PASSWORD_RULE_MESSAGE = '密码至少 8 位,且必须包含英文字母和数字'
|
||||||
'密码至少 6 位,且必须包含大写字母、小写字母、数字和标点符号'
|
|
||||||
|
|
||||||
export function isWorkerPasswordStrong(value: unknown): boolean {
|
export function isWorkerPasswordStrong(value: unknown): boolean {
|
||||||
const password = String(value || '')
|
const password = String(value || '')
|
||||||
return (
|
return (
|
||||||
password.length >= WORKER_PASSWORD_MIN_LENGTH &&
|
password.length >= WORKER_PASSWORD_MIN_LENGTH &&
|
||||||
/[A-Z]/.test(password) &&
|
/[a-zA-Z]/.test(password) &&
|
||||||
/[a-z]/.test(password) &&
|
/\d/.test(password)
|
||||||
/\d/.test(password) &&
|
|
||||||
/[\p{P}\p{S}]/u.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)
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user