From 8353e81a0fc8c729b040da8be09b32d5ca456e1c Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Fri, 31 Oct 2025 14:36:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AF=86=E7=A0=81=E7=94=A8MD5=E5=8A=A0?= =?UTF-8?q?=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 26 ++++++++++++++++++++++++++ package.json | 2 ++ src/utils/tools.ts | 11 +++++++++++ src/views/login/LoginPage.vue | 4 +++- src/views/login/ResetPage.vue | 3 ++- src/views/login/SignupPage.vue | 4 +++- 6 files changed, 47 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index dddcc45..a493c7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "dependencies": { "axios": "^1.3.6", + "crypto-js": "^4.2.0", "gsap": "^3.13.0", "markdown-it": "^14.1.0", "normalize.css": "^8.0.1", @@ -22,6 +23,7 @@ }, "devDependencies": { "@rushstack/eslint-patch": "^1.2.0", + "@types/crypto-js": "^4.2.2", "@types/node": "^18.16.0", "@vant/auto-import-resolver": "^1.3.0", "@vitejs/plugin-vue": "^4.0.0", @@ -654,6 +656,13 @@ "node": ">=10.13.0" } }, + "node_modules/@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz", @@ -2104,6 +2113,12 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", @@ -8935,6 +8950,12 @@ "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true }, + "@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "dev": true + }, "@types/estree": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz", @@ -10039,6 +10060,11 @@ "which": "^2.0.1" } }, + "crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "css-select": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", diff --git a/package.json b/package.json index 6abf0ff..931f726 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ }, "dependencies": { "axios": "^1.3.6", + "crypto-js": "^4.2.0", "gsap": "^3.13.0", "markdown-it": "^14.1.0", "normalize.css": "^8.0.1", @@ -26,6 +27,7 @@ }, "devDependencies": { "@rushstack/eslint-patch": "^1.2.0", + "@types/crypto-js": "^4.2.2", "@types/node": "^18.16.0", "@vant/auto-import-resolver": "^1.3.0", "@vitejs/plugin-vue": "^4.0.0", diff --git a/src/utils/tools.ts b/src/utils/tools.ts index 69b2286..65a05ec 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -1,3 +1,5 @@ +import CryptoJS from 'crypto-js' + function getUniversalZoomLevel() { // 现代浏览器方案 if (window.visualViewport) { @@ -146,3 +148,12 @@ export async function DownloadImages(list: Array<{ url: string, name?: string }> } typeof onSuccess === "function" && onSuccess(successCount, errCount); } + +/** + * MD5加密密码 + * @param password 原始密码 + * @returns MD5加密后的密码 + */ +export function encryptPassword(password: string): string { + return CryptoJS.MD5(password).toString() +} \ No newline at end of file diff --git a/src/views/login/LoginPage.vue b/src/views/login/LoginPage.vue index d7fb2dd..6ddb689 100644 --- a/src/views/login/LoginPage.vue +++ b/src/views/login/LoginPage.vue @@ -50,6 +50,7 @@ import { useUserInfoStore } from '@/stores' import { showToast } from 'vant' import { google } from '@/assets/base64' import { fetchRegisterOrLogin } from '@/api/login' +import { encryptPassword } from '@/utils/tools' const router = useRouter() const userInfoStore = useUserInfoStore() @@ -109,7 +110,8 @@ const handleLogin = async () => { isLoading.value = true - fetchRegisterOrLogin({ ...formData, operationType: 'LOGIN' }).then((response) => { + const encryptedPassword = encryptPassword(formData.password) + fetchRegisterOrLogin({ ...formData, password: encryptedPassword, operationType: 'LOGIN' }).then((response) => { console.log('登录成功', response) userInfoStore.setToken(response.token) userInfoStore.setUserInfo(response.user) diff --git a/src/views/login/ResetPage.vue b/src/views/login/ResetPage.vue index 3561a50..59c643a 100644 --- a/src/views/login/ResetPage.vue +++ b/src/views/login/ResetPage.vue @@ -43,6 +43,7 @@ import Verify from './components/Verify.vue' import Password from './components/Password.vue' import { showToast } from 'vant' import { precheckEmail, resetPassword } from '@/api/login' +import { encryptPassword } from '@/utils/tools' const router = useRouter() const step = ref<'mail' | 'verify' | 'password'>('mail') @@ -92,7 +93,7 @@ const handleCheckVerifyCode = (data: any) => { } const handleSuccess = (data: any) => { - fromData.value.password = data.password + fromData.value.password = encryptPassword(data.password) resetPassword(fromData.value).then((res) => { // console.log('res', res) showToast('the password has been reset') diff --git a/src/views/login/SignupPage.vue b/src/views/login/SignupPage.vue index cb368c3..e1ef9cc 100644 --- a/src/views/login/SignupPage.vue +++ b/src/views/login/SignupPage.vue @@ -56,6 +56,7 @@ import { useRouter } from 'vue-router' import { showToast } from 'vant' import { google } from '@/assets/base64' import { fetchRegisterOrLogin } from '@/api/login' +import { encryptPassword } from '@/utils/tools' const router = useRouter() @@ -121,7 +122,8 @@ const handleConfirm = async () => { isLoading.value = true - fetchRegisterOrLogin({ ...formData, operationType: 'REGISTER' }) + const encryptedPassword = encryptPassword(formData.password) + fetchRegisterOrLogin({ ...formData, password: encryptedPassword, operationType: 'REGISTER' }) .then((res) => { console.log('res', res) showToast('register success')