소스 검색

feat: password

fenghao 1 년 전
부모
커밋
0d5128e516
4개의 변경된 파일69개의 추가작업 그리고 15개의 파일을 삭제
  1. 3 1
      .env
  2. 31 1
      keycloak-theme/login/login-update-password.ftl
  3. 7 0
      src/constant.js
  4. 28 13
      src/layout/components/Navbar/Profile/components/ResetPassword.vue

+ 3 - 1
.env

@@ -62,7 +62,9 @@ VUE_APP_CAMERA_RECORD_PROXY = '/prod-api/playBackWebSocket'
 
 # user default password
 # MD5('123456a?' + MD5('123456a?'))
-VUE_APP_USER_PASSWORD = '1fc3fdb8d13bd4e2d1336f6dd377ee4f'
+# VUE_APP_USER_PASSWORD = '1fc3fdb8d13bd4e2d1336f6dd377ee4f'
+#MD5('LCaby@2024?' + MD5('123456a?'))
+VUE_APP_USER_PASSWORD = '503167abe652d1476b888762e95b5782'
 # MD5('123456a?')
 VUE_APP_SALT = '42857cfddb33f3fddb27fff9773683f3'
 

+ 31 - 1
keycloak-theme/login/login-update-password.ftl

@@ -166,7 +166,7 @@
       class="c-login__main c-login-form"
       action="${url.loginAction}"
       method="post"
-      onsubmit="login.disabled = true; return false;"
+      onsubmit="return false;"
     >
       <div class="c-login-form__header">修改密码</div>
       <div class="c-login-form__tip">
@@ -174,6 +174,9 @@
           <span class="${message.type}">${kcSanitize(message.summary)?no_esc}</span>
         </#if>
       </div>
+      <div class="c-login-form__tip">
+          <span class="warning"> 至少包含数字、字符、小写字母、大写字母 字符范围:+_!@#$%^&amp;*.,?</span>
+      </div>
       <input id="username" name="username" type="text" value="${username}" autocomplete="username" readonly="readonly" style="display:none;"/>
       <input id="password" name="password" type="password" autocomplete="current-password" style="display:none;"/>
       <div class="c-login-form__section">
@@ -237,10 +240,37 @@
   <script>
     function onSubmit () {
       var form = document.getElementById('loginForm')
+      var value =document.getElementById('passwordNewProxy').value
+      var res = checkPassword(value)
+      if(res){
+         window.alert(res)
+         return
+      }
       document.getElementById('passwordNew').value = MD5Salt(document.getElementById('passwordNewProxy').value)
       document.getElementById('passwordConfirm').value = MD5Salt(document.getElementById('passwordConfirmProxy').value)
       form.submit()
     }
+    function checkPassword (password) {
+      if (password.length < 8) {
+        return '密码最少8位'
+      }
+      if (!/^[\da-zA-Z+_!@#$%^&*.,?]+$/.test(password)) {
+        return '包含非法字符'
+      }
+      if (!/\d/.test(password)) {
+        return '缺少数字'
+      }
+      if (!/[a-z]/.test(password)) {
+        return '缺少小写字母'
+      }
+      if (!/[A-Z]/.test(password)) {
+        return '缺少大写字母'
+      }
+      if (!/[+_!@#$%^&*.,?]/.test(password)) {
+        return '缺少特殊字符'
+      }
+      return ''
+    }
   </script>
 </body>
 </html>

+ 7 - 0
src/constant.js

@@ -385,6 +385,13 @@ export const AlarmStrategies = [
   { key: 'wechatApplet', label: '小程序', support: __ALARM_WECHAT_APPLAT__ }
 ]
 
+// export const AlarmStrategies = [
+//   { key: 'note', label: '短信', support: true },
+//   { key: 'email', label: '邮件', support: true },
+//   { key: 'wechat', label: '公众号', support: true },
+//   { key: 'wechatApplet', label: '小程序', support: true }
+// ]
+
 export const SupportedAlarmStrategies = AlarmStrategies.filter(({ support }) => support)
 
 export const TimeType = {

+ 28 - 13
src/layout/components/Navbar/Profile/components/ResetPassword.vue

@@ -1,6 +1,8 @@
 <template>
   <div class="c-grid-form auto">
-    <span class="c-grid-form__label u-bold u-required">新密码</span>
+    <span class="c-grid-form__label u-bold u-required">
+      新密码
+    </span>
     <div class="l-flex--col">
       <el-input
         v-model.trim="newPassword"
@@ -8,10 +10,16 @@
         placeholder="8-20位密码"
         maxlength="20"
       />
-      <div class="c-sibling-item--v nearer u-font-size--xs u-color--info">至少包含数字、字母、字符中的两种</div>
-      <div class="c-sibling-item--v nearer u-font-size--xs u-color--info">字符范围:+_!@#$%^&*.,?</div>
+      <div class="c-sibling-item--v nearer u-font-size--xs u-color--info">
+        至少包含数字、小写字母、大写字母、字符
+      </div>
+      <div class="c-sibling-item--v nearer u-font-size--xs u-color--info">
+        字符范围:+_!@#$%^&*.,?
+      </div>
     </div>
-    <span class="c-grid-form__label u-bold u-required">确认新密码</span>
+    <span class="c-grid-form__label u-bold u-required">
+      确认新密码
+    </span>
     <el-input
       v-model.trim="confirmNewPassword"
       class="u-width--sm u-password"
@@ -74,19 +82,26 @@ export default {
       if (!/^[\da-zA-Z+_!@#$%^&*.,?]+$/.test(password)) {
         return '包含非法字符'
       }
-      let has = 0
-      if (/\d/.test(password)) {
-        has += 1
+      // let has = 0
+      if (!/\d/.test(password)) {
+        // has += 1
+        return '缺少数字'
       }
-      if (/[a-zA-Z]/.test(password)) {
-        has += 1
+      if (!/[a-z]/.test(password)) {
+        // has += 1
+        return '缺少小写字母'
       }
-      if (/[+_!@#$%^&*.,?]/.test(password)) {
-        has += 1
+      if (!/[A-Z]/.test(password)) {
+        // has += 1
+        return '缺少大写字母'
       }
-      if (has < 2) {
-        return '不符合最低安全要求'
+      if (!/[+_!@#$%^&*.,?]/.test(password)) {
+        // has += 1
+        return '缺少特殊字符'
       }
+      // if (has < 4) {
+      //   return '不符合最低安全要求'
+      // }
       return ''
     }
   }