|
@@ -2,6 +2,25 @@ import { ref, computed } from 'vue'
|
|
|
import { getTenantIdByName, login, smsLogin, smsCode } from '@/api/login/login.js'
|
|
import { getTenantIdByName, login, smsLogin, smsCode } from '@/api/login/login.js'
|
|
|
import { ElLoading, ElMessage } from 'element-plus'
|
|
import { ElLoading, ElMessage } from 'element-plus'
|
|
|
import { updateAllDictData } from './dictUtils.js';
|
|
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 = () => {
|
|
const createLoginData = () => {
|
|
@@ -119,6 +138,7 @@ const loginLogic = async (loginForm, tenantId, isAuthorized, router, redirectPat
|
|
|
)
|
|
)
|
|
|
} else {
|
|
} else {
|
|
|
// 授权状态,使用账号密码登录
|
|
// 授权状态,使用账号密码登录
|
|
|
|
|
+ // 传输时使用明文密码,确保后端能正确处理
|
|
|
res = await login(
|
|
res = await login(
|
|
|
{ 'Tenant-Id': tenantId },
|
|
{ 'Tenant-Id': tenantId },
|
|
|
loginForm
|
|
loginForm
|
|
@@ -144,8 +164,8 @@ const loginLogic = async (loginForm, tenantId, isAuthorized, router, redirectPat
|
|
|
localStorage.setItem('rememberMe', loginForm.rememberMe)
|
|
localStorage.setItem('rememberMe', loginForm.rememberMe)
|
|
|
|
|
|
|
|
if (loginForm.rememberMe) {
|
|
if (loginForm.rememberMe) {
|
|
|
- // 保存密码
|
|
|
|
|
- localStorage.setItem('password', loginForm.password)
|
|
|
|
|
|
|
+ // 保存加密后的密码
|
|
|
|
|
+ localStorage.setItem('password', encryptPassword(loginForm.password))
|
|
|
} else {
|
|
} else {
|
|
|
// 如果没有勾选记住我,清除密码
|
|
// 如果没有勾选记住我,清除密码
|
|
|
localStorage.removeItem('password')
|
|
localStorage.removeItem('password')
|
|
@@ -209,7 +229,8 @@ const loadLoginData = (loginData) => {
|
|
|
loginData.value.loginForm.username = storedUserName
|
|
loginData.value.loginForm.username = storedUserName
|
|
|
}
|
|
}
|
|
|
if (storedPassword) {
|
|
if (storedPassword) {
|
|
|
- loginData.value.loginForm.password = storedPassword
|
|
|
|
|
|
|
+ // 解密密码并显示明文
|
|
|
|
|
+ loginData.value.loginForm.password = decryptPassword(storedPassword)
|
|
|
loginData.value.loginForm.rememberMe = true
|
|
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('token', res.data.accessToken)
|
|
|
localStorage.setItem('userName', username)
|
|
localStorage.setItem('userName', username)
|
|
|
localStorage.setItem('tenantName', tenantName)
|
|
localStorage.setItem('tenantName', tenantName)
|
|
|
- localStorage.setItem('password', password)
|
|
|
|
|
|
|
+ localStorage.setItem('password', encryptPassword(password))
|
|
|
localStorage.setItem('rememberMe', 'true')
|
|
localStorage.setItem('rememberMe', 'true')
|
|
|
|
|
|
|
|
ElMessage.success('信息校验成功')
|
|
ElMessage.success('信息校验成功')
|