feat: lower Sense password minimum to six characters (#40)

This commit is contained in:
QiuSW
2026-08-13 08:51:35 +08:00
parent 8b3d814628
commit f841ef1913
3 changed files with 41 additions and 5 deletions
+2 -2
View File
@@ -9,8 +9,8 @@ import (
)
func ValidatePassword(username, password string) error {
if len([]rune(password)) < 12 {
return fmt.Errorf("密码至少需要 12 个字符")
if len([]rune(password)) < 6 {
return fmt.Errorf("密码至少需要 6 个字符")
}
var upper, lower, digit bool
for _, value := range password {
@@ -0,0 +1,37 @@
package identity
import (
"strings"
"testing"
)
func TestValidatePasswordLengthAndComplexity(t *testing.T) {
tests := []struct {
name string
username string
password string
want string
}{
{name: "six characters", username: "operator", password: "Abc123"},
{name: "five characters", username: "operator", password: "Ab123", want: "至少需要 6 个字符"},
{name: "missing uppercase", username: "operator", password: "abc123", want: "大写字母、小写字母和数字"},
{name: "missing lowercase", username: "operator", password: "ABC123", want: "大写字母、小写字母和数字"},
{name: "missing digit", username: "operator", password: "Abcdef", want: "大写字母、小写字母和数字"},
{name: "contains username", username: "admin", password: "MyAdmin1", want: "不能包含用户名"},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
err := ValidatePassword(test.username, test.password)
if test.want == "" {
if err != nil {
t.Fatalf("ValidatePassword() error = %v", err)
}
return
}
if err == nil || !strings.Contains(err.Error(), test.want) {
t.Fatalf("ValidatePassword() error = %v, want substring %q", err, test.want)
}
})
}
}
+2 -3
View File
@@ -30,7 +30,7 @@
<el-form-item label="用户名" prop="username"><el-input v-model="form.username" :disabled="Boolean(editingID)" /></el-form-item>
<el-form-item label="姓名" prop="display_name"><el-input v-model="form.display_name" /></el-form-item>
<el-form-item label="角色" prop="role"><el-select v-model="form.role" style="width: 100%"><el-option v-for="role in roles" :key="role.value" :label="role.label" :value="role.value" /></el-select></el-form-item>
<el-form-item v-if="!editingID" label="初始密码" prop="password"><el-input v-model="form.password" type="password" show-password /><div class="field-hint">至少 12 位,包含大小写字母和数字,且不含用户名。</div></el-form-item>
<el-form-item v-if="!editingID" label="初始密码" prop="password"><el-input v-model="form.password" type="password" show-password /><div class="field-hint">至少 6 位,包含大小写字母和数字,且不含用户名。</div></el-form-item>
<el-form-item v-else label="状态"><el-switch v-model="form.enabled" active-text="启用" inactive-text="停用" /></el-form-item>
</el-form>
<template #footer><el-button @click="dialogVisible = false">取消</el-button><el-button type="primary" :loading="saving" @click="save">保存</el-button></template>
@@ -64,7 +64,7 @@ const rules = {
username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
display_name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
role: [{ required: true, message: '请选择角色', trigger: 'change' }],
password: [{ required: true, min: 12, message: '请输入至少 12 位初始密码', trigger: 'blur' }]
password: [{ required: true, min: 6, message: '请输入至少 6 位初始密码', trigger: 'blur' }]
}
const canWrite = computed(() => store.getters['sense-identity/hasPermission']?.('identity.users.write'))
const filteredUsers = computed(() => {
@@ -99,4 +99,3 @@ onMounted(load)
<style scoped>
.field-hint { color: #86909c; font-size: 12px; line-height: 1.5; }
</style>