密码正则校验完善
This commit is contained in:
parent
f14370ce9c
commit
b6389c92c1
|
|
@ -89,6 +89,6 @@ export function isArray(arg) {
|
||||||
|
|
||||||
// 密码规则:8-20位,必须包含字母、数字、特殊字符中的两种
|
// 密码规则:8-20位,必须包含字母、数字、特殊字符中的两种
|
||||||
export function validPassword(str) {
|
export function validPassword(str) {
|
||||||
const reg = /^((?=.*[A-Za-z])(?=.*\d)|(?=.*[A-Za-z])(?=.*[!@#$%^&*()_+\-\=])|(?=.*\d)(?=.*[!@#$%^&*()_+\-\=]))[A-Za-z\d!@#$%^&*()_+\-\=]{8,20}$/
|
const reg = /^(?!.*(?:111|888|123|234|345|456|567|678|789|1234|2345|3456|4567|5678|6789|12345|23456|34567|45678|56789|abc|abcd|abcde|abcdef|abcdefg|qwe|qwer|qwert|qwerty|asdf|asdfg|asdfgh|password|passw0rd|letmein|welcome|admin|user|test|pass|root|login))(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()_+{}\[\]:;"'|\\,.<>\/?~-]).{8,16}$/
|
||||||
return reg.test(str)
|
return reg.test(str)
|
||||||
}
|
}
|
||||||
|
|
@ -836,8 +836,10 @@ export default {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
closeOnClickModal: false,
|
closeOnClickModal: false,
|
||||||
inputPattern: /^.{5,20}$/,
|
inputPattern:
|
||||||
inputErrorMessage: '用户密码长度必须介于 5 和 20 之间',
|
/^(?!.*(?:111|888|123|234|345|456|567|678|789|1234|2345|3456|4567|5678|6789|12345|23456|34567|45678|56789|abc|abcd|abcde|abcdef|abcdefg|qwe|qwer|qwert|qwerty|asdf|asdfg|asdfgh|password|passw0rd|letmein|welcome|admin|user|test|pass|root|login))(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*()_+{}\[\]:;"'|\\,.<>\/?~-]).{8,16}$/,
|
||||||
|
inputErrorMessage:
|
||||||
|
'请设置8到16位,由字母、数字、特殊字符3种组合,且数字不可连续的密码',
|
||||||
})
|
})
|
||||||
.then(({ value }) => {
|
.then(({ value }) => {
|
||||||
const password = encrypt(value)
|
const password = encrypt(value)
|
||||||
|
|
|
||||||
|
|
@ -1,83 +1,127 @@
|
||||||
<template>
|
<template>
|
||||||
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
|
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
|
||||||
<el-form-item label="旧密码" prop="oldPassword">
|
<el-form-item label="旧密码" prop="oldPassword">
|
||||||
<el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password/>
|
<el-input
|
||||||
</el-form-item>
|
v-model="user.oldPassword"
|
||||||
<el-form-item label="新密码" prop="newPassword">
|
placeholder="请输入旧密码"
|
||||||
<el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password/>
|
type="password"
|
||||||
</el-form-item>
|
show-password
|
||||||
<el-form-item label="确认密码" prop="confirmPassword">
|
/>
|
||||||
<el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="新密码" prop="newPassword">
|
||||||
<el-form-item>
|
<el-input
|
||||||
<el-button type="primary" size="mini" @click="submit">保存</el-button>
|
v-model="user.newPassword"
|
||||||
<el-button type="danger" size="mini" @click="close">关闭</el-button>
|
placeholder="请输入新密码"
|
||||||
</el-form-item>
|
type="password"
|
||||||
</el-form>
|
show-password
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="确认密码" prop="confirmPassword">
|
||||||
|
<el-input
|
||||||
|
v-model="user.confirmPassword"
|
||||||
|
placeholder="请确认新密码"
|
||||||
|
type="password"
|
||||||
|
show-password
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" size="mini" @click="submit"
|
||||||
|
>保存</el-button
|
||||||
|
>
|
||||||
|
<el-button type="danger" size="mini" @click="close">关闭</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { updateUserPwd } from "@/api/system/user";
|
import { updateUserPwd } from '@/api/system/user'
|
||||||
import { validPassword } from '@/utils/validate'
|
import { validPassword } from '@/utils/validate'
|
||||||
import { encrypt } from '@/utils/jsencrypt.js'
|
import { encrypt } from '@/utils/jsencrypt.js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
const passwordRegex = (rule, value, callback) => {
|
const passwordRegex = (rule, value, callback) => {
|
||||||
if (value.length < 8 || value.length > 20) {
|
if (
|
||||||
callback(new Error("密码长度在 8 到 20 个字符"));
|
value.length < 8 ||
|
||||||
} else if (!validPassword(value)) {
|
value.length > 16 ||
|
||||||
callback(new Error("密码须包含数字、字母、特殊符号中的两种以上"));
|
!validPassword(value)
|
||||||
} else if (this.user.oldPassword === value) {
|
) {
|
||||||
callback(new Error('新密码不能与旧密码相同'))
|
callback(
|
||||||
} else {
|
new Error(
|
||||||
callback()
|
'请设置8到16位,由字母、数字、特殊字符3种组合,且数字不可连续的密码',
|
||||||
}
|
),
|
||||||
}
|
)
|
||||||
const equalToPassword = (rule, value, callback) => {
|
return false
|
||||||
if (this.user.newPassword !== value) {
|
} else if (this.user.oldPassword === value) {
|
||||||
callback(new Error("两次输入的密码不一致"));
|
callback(new Error('新密码不能与旧密码相同'))
|
||||||
} else {
|
} else {
|
||||||
callback();
|
callback()
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
return {
|
const equalToPassword = (rule, value, callback) => {
|
||||||
user: {
|
if (this.user.newPassword !== value) {
|
||||||
oldPassword: undefined,
|
callback(new Error('两次输入的密码不一致'))
|
||||||
newPassword: undefined,
|
} else {
|
||||||
confirmPassword: undefined
|
callback()
|
||||||
},
|
}
|
||||||
// 表单校验
|
}
|
||||||
rules: {
|
return {
|
||||||
oldPassword: [
|
user: {
|
||||||
{ required: true, message: "旧密码不能为空", trigger: "blur" }
|
oldPassword: undefined,
|
||||||
],
|
newPassword: undefined,
|
||||||
newPassword: [
|
confirmPassword: undefined,
|
||||||
{ required: true, message: "新密码不能为空", trigger: "blur" },
|
},
|
||||||
{ required: true, validator: passwordRegex, trigger: "blur" }
|
// 表单校验
|
||||||
],
|
rules: {
|
||||||
confirmPassword: [
|
oldPassword: [
|
||||||
{ required: true, message: "确认密码不能为空", trigger: "blur" },
|
{
|
||||||
{ required: true, validator: equalToPassword, trigger: "blur" }
|
required: true,
|
||||||
]
|
message: '旧密码不能为空',
|
||||||
}
|
trigger: 'blur',
|
||||||
};
|
},
|
||||||
},
|
],
|
||||||
methods: {
|
newPassword: [
|
||||||
submit() {
|
{
|
||||||
this.$refs["form"].validate(valid => {
|
required: true,
|
||||||
if (valid) {
|
message: '新密码不能为空',
|
||||||
const oldPassword = encrypt(this.user.oldPassword)
|
trigger: 'blur',
|
||||||
const newPassword = encrypt(this.user.newPassword)
|
},
|
||||||
updateUserPwd(oldPassword, newPassword).then(response => {
|
{
|
||||||
this.$modal.msgSuccess("修改成功");
|
required: true,
|
||||||
});
|
validator: passwordRegex,
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
confirmPassword: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: '确认密码不能为空',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
validator: equalToPassword,
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
|
||||||
},
|
},
|
||||||
close() {
|
methods: {
|
||||||
this.$tab.closePage();
|
submit() {
|
||||||
}
|
this.$refs['form'].validate((valid) => {
|
||||||
}
|
if (valid) {
|
||||||
};
|
const oldPassword = encrypt(this.user.oldPassword)
|
||||||
|
const newPassword = encrypt(this.user.newPassword)
|
||||||
|
updateUserPwd(oldPassword, newPassword).then((response) => {
|
||||||
|
this.$modal.msgSuccess('修改成功')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
close() {
|
||||||
|
this.$tab.closePage()
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue