فهرست منبع

弱密码问题处理

xushili 1 سال پیش
والد
کامیت
77793ef2fd

+ 12 - 4
exam-06173-vue/src/views/admin/sys/user/index.vue

@@ -271,6 +271,7 @@ import DetailLink from '@/components/DetailLink'
 import FileUpload from '@/components/FileUpload'
 
 import { mapGetters } from 'vuex'
+import {checkPass} from "@/utils/validate";
 
 export default {
   name: 'SysUserList',
@@ -291,6 +292,13 @@ export default {
     roleIds: Array
   },
   data() {
+    const validatePass = (rule, value, callback) => {
+      if (!checkPass(value)) {
+        callback(new Error('密码必须包含大小写字母、数字和特殊字符且不能小于8位!'))
+      } else {
+        callback()
+      }
+    }
     return {
 
       loading: false,
@@ -305,7 +313,7 @@ export default {
           { required: true, message: '姓名不能为空!' }
         ],
         password: [
-          { required: true, message: '密码不能为空!' }
+          { required: true, trigger: 'blur', validator: validatePass }
         ],
         deptCode: [
           { required: true, message: '部门不能为空!' }
@@ -436,15 +444,15 @@ export default {
     handleAdd() {
       this.formData = { departId: this.formData.departId }
       this.dialogVisible = true
-      this.rules.password = [{ required: true, message: '密码不能为空!' }]
+      this.rules.password = [{ required: true, trigger: 'blur', validator: validatePass }]
     },
 
     handleUpdate(id) {
       fetchDetail(id).then(res => {
         this.dialogVisible = true
         this.formData = res.data
-        this.formData.password = null
-        this.rules.password = []
+        this.formData.password = [{ required: true, trigger: 'blur', validator: validatePass }]
+        this.rules.password = [{ required: true, trigger: 'blur', validator: validatePass }]
       })
     },
 

+ 12 - 4
exam-06173-vue/src/views/admin/sys/user/points/index.vue

@@ -257,6 +257,7 @@ import DetailLink from '@/components/DetailLink'
 import FileUpload from '@/components/FileUpload'
 
 import { mapGetters } from 'vuex'
+import {checkPass} from "@/utils/validate";
 
 export default {
   name: 'SysUserList',
@@ -278,6 +279,13 @@ export default {
   },
 
   data() {
+    const validatePass = (rule, value, callback) => {
+      if (!checkPass(value)) {
+        callback(new Error('密码必须包含大小写字母、数字和特殊字符且不能小于8位!'))
+      } else {
+        callback()
+      }
+    }
     return {
 
       loading: false,
@@ -292,7 +300,7 @@ export default {
           { required: true, message: '姓名不能为空!' }
         ],
         password: [
-          { required: true, message: '密码不能为空!' }
+          { required: true, trigger: 'blur', validator: validatePass }
         ],
         deptCode: [
           { required: true, message: '部门不能为空!' }
@@ -423,15 +431,15 @@ export default {
     handleAdd() {
       this.formData = { departId: this.formData.departId }
       this.dialogVisible = true
-      this.rules.password = [{ required: true, message: '密码不能为空!' }]
+      this.rules.password = [{ required: true, trigger: 'blur', validator: validatePass }]
     },
 
     handleUpdate(id) {
       fetchDetail(id).then(res => {
         this.dialogVisible = true
         this.formData = res.data
-        this.formData.password = null
-        this.rules.password = []
+        this.formData.password = [{ required: true, trigger: 'blur', validator: validatePass }]
+        this.rules.password = [{ required: true, trigger: 'blur', validator: validatePass }]
       })
     },
 

+ 17 - 0
exam-06173-vue/src/views/profile/components/Account.vue

@@ -33,6 +33,23 @@ export default {
     },
 
     async submit() {
+      // 验证密码是否合法
+      const validReg = /^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#$%^&+=])(?=\S+$).{8,}$/
+      if (!this.user.password) {
+        this.$notify.error({
+          title: '错误',
+          message: '密码不能为空',
+          duration: 2000
+        })
+        return
+      } else if (!validReg.test(this.user.password)) {
+        this.$notify.error({
+          title: '错误',
+          message: '密码必须包含大小写字母、数字和特殊字符且不能小于8位',
+          duration: 2000
+        })
+        return
+      }
       updateData(this.user).then(() => {
         this.$notify({
           title: '成功',