丸子 преди 3 месеца
родител
ревизия
eee2d56137
променени са 1 файла, в които са добавени 25 реда и са изтрити 4 реда
  1. 25 4
      src/utils/loginUtils.js

+ 25 - 4
src/utils/loginUtils.js

@@ -2,6 +2,25 @@ import { ref, computed } from 'vue'
 import { getTenantIdByName, login, smsLogin, smsCode } from '@/api/login/login.js'
 import { ElLoading, ElMessage } from 'element-plus'
 import { updateAllDictData } from './dictUtils.js';
+// CryptoJS 库(用于密码加密)
+import CryptoJS from 'crypto-js';
+
+// 加密密钥 (从环境变量获取)
+const SECRET_KEY = import.meta.env.VITE_SECRET_KEY;
+
+// 密码加密函数(使用AES加密)
+const encryptPassword = (password) => {
+  // 将加密结果转换为字符串并返回 (encrypt加密)
+  return CryptoJS.AES.encrypt(password, SECRET_KEY).toString();
+};
+
+// 密码解密函数 (接收加密后的密码字符串作为参数)
+const decryptPassword = (encryptedPassword) => {
+  // (decrypt解密)
+  const bytes = CryptoJS.AES.decrypt(encryptedPassword, SECRET_KEY);
+  // 将解密结果转换为 UTF-8 编码的字符串并返回
+  return bytes.toString(CryptoJS.enc.Utf8);
+};
 
 // 登录数据结构
 const createLoginData = () => {
@@ -119,6 +138,7 @@ const loginLogic = async (loginForm, tenantId, isAuthorized, router, redirectPat
       )
     } else {
       // 授权状态,使用账号密码登录
+      // 传输时使用明文密码,确保后端能正确处理
       res = await login(
         { 'Tenant-Id': tenantId },
         loginForm
@@ -144,8 +164,8 @@ const loginLogic = async (loginForm, tenantId, isAuthorized, router, redirectPat
       localStorage.setItem('rememberMe', loginForm.rememberMe)
       
       if (loginForm.rememberMe) {
-        // 保存密码
-        localStorage.setItem('password', loginForm.password)
+        // 保存加密后的密码
+        localStorage.setItem('password', encryptPassword(loginForm.password))
       } else {
         // 如果没有勾选记住我,清除密码
         localStorage.removeItem('password')
@@ -209,7 +229,8 @@ const loadLoginData = (loginData) => {
     loginData.value.loginForm.username = storedUserName
   }
   if (storedPassword) {
-    loginData.value.loginForm.password = storedPassword
+    // 解密密码并显示明文
+    loginData.value.loginForm.password = decryptPassword(storedPassword)
     loginData.value.loginForm.rememberMe = true
   }
 }
@@ -278,7 +299,7 @@ const autoLogin = async (tenantName, username, password, router, redirectPath) =
       localStorage.setItem('token', res.data.accessToken)
       localStorage.setItem('userName', username)
       localStorage.setItem('tenantName', tenantName)
-      localStorage.setItem('password', password)
+      localStorage.setItem('password', encryptPassword(password))
       localStorage.setItem('rememberMe', 'true')
 
       ElMessage.success('信息校验成功')