feat(X-Pack): 增加用户限制登录 #12638

This commit is contained in:
fit2cloud-chenyw 2024-11-19 17:08:38 +08:00
parent ecfd072b73
commit aaa8f5e3c3
5 changed files with 51 additions and 15 deletions

View File

@ -742,7 +742,7 @@ export default {
reset_success: '重置成功',
modify_cur_pwd: '修改當前用戶密碼后需要重新登錄',
switch_success: '切換成功',
user_name_pattern_error: '只允許數字字母以及._-且必須數字或字母開頭',
user_name_pattern_error: "只允許數字字母以及{'@'}._-且必須數字或字母開頭",
pwd_pattern_error: '6-20位且至少一位大寫字母小寫字母數字特殊字符',
special_characters_are_not_supported: '不允許特殊字符',
phone_format: '請填寫正確格式手機號',

View File

@ -755,7 +755,7 @@ export default {
reset_success: '重置成功',
modify_cur_pwd: '修改当前用户密码后需要重新登录',
switch_success: '切换成功',
user_name_pattern_error: '只允许数字字母以及._-且必须数字或字母开头',
user_name_pattern_error: "只允许数字字母以及{'@'}._-且必须数字或字母开头",
pwd_pattern_error: '6-20位且至少一位大写字母小写字母数字特殊字符',
special_characters_are_not_supported: '不允许特殊字符',
phone_format: '请填写正确格式手机号',

View File

@ -51,28 +51,42 @@ const state = reactive({
},
footContent: ''
})
const checkUsername = value => {
if (!value) {
return true
const checkUsername = (rule: any, value: any, callback: any) => {
if (!value || activeName.value === 'ldap') {
return callback()
}
const pattern = /^[a-zA-Z0-9][a-zA-Z0-9\@._-]*$/
const reg = new RegExp(pattern)
return reg.test(value)
if (!reg.test(value)) {
const msg = t('user.user_name_pattern_error')
callback(new Error(msg))
}
return callback()
}
const validatePwd = value => {
if (!value) {
return true
const validatePwd = (rule: any, value: any, callback: any) => {
if (!value || activeName.value === 'ldap') {
return callback()
}
const pattern =
/^.*(?=.{6,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[~!@#$%^&*()_+\-\={}|":<>?`[\];',.\/])[a-zA-Z0-9~!@#$%^&*()_+\-\={}|":<>?`[\];',.\/]*$/
const regep = new RegExp(pattern)
return regep.test(value)
if (!regep.test(value)) {
const msg = t('user.pwd_pattern_error')
callback(new Error(msg))
}
return callback()
}
const rules = reactive<FormRules>({
username: [{ required: true, message: t('common.required'), trigger: 'blur' }],
password: [{ required: true, message: t('common.required'), trigger: 'blur' }]
username: [
{ required: true, message: t('common.required'), trigger: 'blur' },
{ required: true, validator: checkUsername, trigger: 'blur' }
],
password: [
{ required: true, message: t('common.required'), trigger: 'blur' },
{ required: true, validator: validatePwd, trigger: 'blur' }
]
})
const activeName = ref('simple')
@ -91,10 +105,10 @@ const handleLogin = () => {
if (!formRef.value) return
formRef.value.validate(async (valid: boolean) => {
if (valid) {
if (!checkUsername(state.loginForm.username) || !validatePwd(state.loginForm.password)) {
/* if (!checkUsername(state.loginForm.username) || !validatePwd(state.loginForm.password)) {
ElMessage.error('用户名或密码错误')
return
}
} */
const name = state.loginForm.username.trim()
const pwd = state.loginForm.password
if (!wsCache.get(appStore.getDekey)) {

@ -1 +1 @@
Subproject commit 0fbbd2f6394ea5197285ed51b3bb911413f3732f
Subproject commit b8975525241b57a4f753113bc860c16fbd8fca21

View File

@ -0,0 +1,22 @@
package io.dataease.api.permissions.login.dto;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
@Data
public class AccountLockStatus implements Serializable {
@Serial
private static final long serialVersionUID = 8310029430986389948L;
private Boolean locked = false;
private String account;
private Long unlockTime;
private Integer relieveTimes;
private Integer remainderTimes;
}