Commit 0723d45d authored by 张伯涛's avatar 张伯涛

弱口令问题

parent 9b004b7d
...@@ -51,6 +51,24 @@ export default { ...@@ -51,6 +51,24 @@ export default {
components: {}, components: {},
props: {}, props: {},
data() { data() {
const passwordCheck = (rule, value, callback) => {
const types = {
lower: /[a-z]+/,
upper: /[A-Z]+/,
number: /[0-9]+/,
special: /[\W_]+/
}
let matchCount = 0
for (const type in types) {
if (types[type].test(value)) {
matchCount++
}
}
if (matchCount < 3) {
callback(new Error('密码必须包括数字、小写字母、大写字母和特殊符号4类中至少3类'))
}
callback()
}
return { return {
userId: '', userId: '',
pwdList: { pwdList: {
...@@ -63,7 +81,12 @@ export default { ...@@ -63,7 +81,12 @@ export default {
{ required: true, trigger: 'blur', message: '请输入旧密码' } { required: true, trigger: 'blur', message: '请输入旧密码' }
], ],
pass: [ pass: [
{ validator: this.validatePass, trigger: 'blur', required: true } { required: true, message: '请输入用户密码', trigger: 'blur' },
{ min: 8, max: 20, message: '长度在 8 到 20 个字符', trigger: 'blur' },
{
validator: passwordCheck,
trigger: 'blur'
}
], ],
checkPass: [ checkPass: [
{ validator: this.validatePass2, trigger: 'blur', required: true } { validator: this.validatePass2, trigger: 'blur', required: true }
...@@ -96,18 +119,6 @@ export default { ...@@ -96,18 +119,6 @@ export default {
} }
}) })
}, },
validatePass(rule, value, callback) {
if (value === '') {
callback(new Error('请输入密码'))
} else {
const pw_pattern = '^(?![A-Za-z]+$)(?![a-z\\W]+$)(?![A-Z\\W]+$)(?![0-9\\W]+$)[a-zA-Z0-9\\W]{6,20}$'
if (value.match(pw_pattern)) {
callback()
} else {
callback(new Error('6~20位,由字母和数字混合组成'))
}
}
},
validatePass2(rule, value, callback) { validatePass2(rule, value, callback) {
if (value === '') { if (value === '') {
callback(new Error('请再次输入新密码')) callback(new Error('请再次输入新密码'))
......
...@@ -241,13 +241,16 @@ ...@@ -241,13 +241,16 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="form.businessId == undefined || form.identity === '1'" label="登录名:" prop="username"> <el-form-item v-if="form.businessId == undefined || form.identity === '1'" label="登录名:" prop="username">
<el-input v-model="form.username" :disabled="form.identity === '1'" show-word-limit maxlength="20" placeholder="请输入登录名" /> <el-input v-model="form.username" :disabled="form.identity === '1'" show-word-limit maxlength="20" placeholder="请输入登录名" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="form.businessId == undefined" label="密码:" prop="password"> <el-form-item v-if="form.businessId == undefined" label="状态:">
<el-input v-model="form.password" placeholder="请输入密码" type="password" /> <el-radio-group v-model="form.flag">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -267,55 +270,16 @@ ...@@ -267,55 +270,16 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="昵称:" prop="nickName"> <el-form-item label="昵称:" prop="nickName">
<el-input v-model="form.nickName" maxlength="50" placeholder="请输入用户昵称" /> <el-input v-model="form.nickName" maxlength="50" placeholder="请输入用户昵称" />
</el-form-item> </el-form-item>
</el-col>--> </el-col>-->
</el-row> </el-row>
<!-- <el-row>
&lt;!&ndash; <el-col :span="12">
<el-form-item label="性别:">
<el-select v-model="form.sex" placeholder="请选择">
<el-option
v-for="dict in sexOptions"
:key="dict.dictValue"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>&ndash;&gt;
<el-col :span="12">
<el-form-item label="手机号码:" prop="phone">
<el-input
v-model.trim="form.phone"
value="phone"
placeholder="请输入手机号码"
maxlength="11"
/>
</el-form-item>
</el-col>
</el-row>-->
<!-- <el-row>
<el-col :span="12">
<el-form-item label="身份证号:" prop="idNumber">
<el-input v-model.trim="form.idNumber" placeholder="请输入身份证号" maxlength="18" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱:" prop="email">
<el-input v-model.trim="form.email" placeholder="请输入邮箱" maxlength="25" />
</el-form-item>
</el-col>
</el-row>-->
<el-row> <el-row>
<el-col :span="12"> <el-col :span="24">
<el-form-item v-if="form.businessId == undefined" label="状态:"> <el-form-item v-if="form.businessId == undefined" label="密码:" prop="password">
<el-radio-group v-model="form.flag"> <el-input v-model="form.password" placeholder="请输入密码" />
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
...@@ -410,7 +374,7 @@ ...@@ -410,7 +374,7 @@
autocomplete="off" autocomplete="off"
auto-complete="off" auto-complete="off"
:type="pwdType" :type="pwdType"
placeholder="请输入6~20位,由字母和数字混合所组成的新密码" placeholder="请输入新密码"
:maxlength="20" :maxlength="20"
> >
<svg-icon <svg-icon
...@@ -468,7 +432,7 @@ import { getToken } from '@/utils/auth' ...@@ -468,7 +432,7 @@ import { getToken } from '@/utils/auth'
import { listAllDept, treeSelect } from '@/api/system/dept' import { listAllDept, treeSelect } from '@/api/system/dept'
import TreeSelect from '@riophae/vue-treeselect' import TreeSelect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css' import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import {getListRole, getListRoleOld} from '@/api/system/role' import { getListRole, getListRoleOld } from '@/api/system/role'
import { getDataCache, setDataCache } from '@/assets/js/filterData' import { getDataCache, setDataCache } from '@/assets/js/filterData'
import commonField from '@/utils/commonField' import commonField from '@/utils/commonField'
import ElImageViewer from 'element-ui/packages/image/src/image-viewer' import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
...@@ -485,9 +449,20 @@ export default { ...@@ -485,9 +449,20 @@ export default {
callback() callback()
} }
const passwordCheck = (rule, value, callback) => { const passwordCheck = (rule, value, callback) => {
const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/ const types = {
if (!pattern.test(value)) { lower: /[a-z]+/,
callback(new Error('新密码必须为数字与字母的组合')) upper: /[A-Z]+/,
number: /[0-9]+/,
special: /[\W_]+/
}
let matchCount = 0
for (const type in types) {
if (types[type].test(value)) {
matchCount++
}
}
if (matchCount < 3) {
callback(new Error('密码必须包括数字、小写字母、大写字母和特殊符号4类中至少3类'))
} }
callback() callback()
} }
...@@ -637,7 +612,7 @@ export default { ...@@ -637,7 +612,7 @@ export default {
], ],
password: [ password: [
{ required: true, message: '请输入用户密码', trigger: 'blur' }, { required: true, message: '请输入用户密码', trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }, { min: 8, max: 20, message: '长度在 8 到 20 个字符', trigger: 'blur' },
{ {
validator: passwordCheck, validator: passwordCheck,
trigger: 'blur' trigger: 'blur'
...@@ -657,7 +632,7 @@ export default { ...@@ -657,7 +632,7 @@ export default {
], ],
newPassword: [ newPassword: [
{ required: true, message: '请输入密码', trigger: 'blur' }, { required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }, { min: 8, max: 20, message: '长度在 8 到 20 个字符', trigger: 'blur' },
{ validator: passwordCheck, trigger: 'blur' } { validator: passwordCheck, trigger: 'blur' }
], ],
phone: [ phone: [
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment