|
@@ -63,8 +63,10 @@
|
|
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
import { getCodeImg } from "@/api/login";
|
|
import { getCodeImg } from "@/api/login";
|
|
|
-import Cookies from "js-cookie";
|
|
|
|
|
-import { encrypt, decrypt } from '@/utils/jsencrypt'
|
|
|
|
|
|
|
+// ✅ 安全修复:使用 localStorage 替代 Cookies
|
|
|
|
|
+// import Cookies from "js-cookie";
|
|
|
|
|
+// ✅ 安全修复:只导入encrypt,不导入decrypt(decrypt已被删除)
|
|
|
|
|
+import { encrypt } from '@/utils/jsencrypt'
|
|
|
|
|
|
|
|
export default {
|
|
export default {
|
|
|
name: "Login",
|
|
name: "Login",
|
|
@@ -72,8 +74,9 @@ export default {
|
|
|
return {
|
|
return {
|
|
|
codeUrl: "",
|
|
codeUrl: "",
|
|
|
loginForm: {
|
|
loginForm: {
|
|
|
- userName: "admin",
|
|
|
|
|
- password: "admin123",
|
|
|
|
|
|
|
+ // ✅ 安全修复:移除默认账号密码
|
|
|
|
|
+ userName: "",
|
|
|
|
|
+ password: "",
|
|
|
rememberMe: false,
|
|
rememberMe: false,
|
|
|
code: "",
|
|
code: "",
|
|
|
uuid: ""
|
|
uuid: ""
|
|
@@ -105,12 +108,15 @@ export default {
|
|
|
},
|
|
},
|
|
|
created() {
|
|
created() {
|
|
|
this.getCode();
|
|
this.getCode();
|
|
|
- this.getCookie();
|
|
|
|
|
|
|
+ this.loadRememberedUser(); // ✅ 改名,更准确
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
getCode() {
|
|
getCode() {
|
|
|
getCodeImg().then(res => {
|
|
getCodeImg().then(res => {
|
|
|
- console.log(res, 'res');
|
|
|
|
|
|
|
+ // ✅ 安全修复:移除console.log或仅在开发环境使用
|
|
|
|
|
+ if (process.env.NODE_ENV === 'development') {
|
|
|
|
|
+ console.log('验证码获取成功');
|
|
|
|
|
+ }
|
|
|
this.captchaEnabled = res.data.captchaEnabled === undefined ? true : res.data.captchaEnabled;
|
|
this.captchaEnabled = res.data.captchaEnabled === undefined ? true : res.data.captchaEnabled;
|
|
|
if (this.captchaEnabled) {
|
|
if (this.captchaEnabled) {
|
|
|
this.codeUrl = "data:image/gif;base64," + res.data.img;
|
|
this.codeUrl = "data:image/gif;base64," + res.data.img;
|
|
@@ -118,29 +124,32 @@ export default {
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
},
|
|
},
|
|
|
- getCookie() {
|
|
|
|
|
- const userName = Cookies.get("userName");
|
|
|
|
|
- const password = Cookies.get("password");
|
|
|
|
|
- const rememberMe = Cookies.get('rememberMe')
|
|
|
|
|
- this.loginForm = {
|
|
|
|
|
- userName: userName === undefined ? this.loginForm.userName : userName,
|
|
|
|
|
- password: password === undefined ? this.loginForm.password : decrypt(password),
|
|
|
|
|
- rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
|
|
|
|
|
- };
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // ✅ 安全修复:只加载用户名,不加载密码(使用 localStorage)
|
|
|
|
|
+ loadRememberedUser() {
|
|
|
|
|
+ const rememberedUser = localStorage.getItem("rememberedUser");
|
|
|
|
|
+ if (rememberedUser) {
|
|
|
|
|
+ this.loginForm.userName = rememberedUser;
|
|
|
|
|
+ this.loginForm.rememberMe = true;
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
|
|
+
|
|
|
handleLogin() {
|
|
handleLogin() {
|
|
|
this.$refs.loginForm.validate(valid => {
|
|
this.$refs.loginForm.validate(valid => {
|
|
|
if (valid) {
|
|
if (valid) {
|
|
|
this.loading = true;
|
|
this.loading = true;
|
|
|
|
|
+
|
|
|
|
|
+ // ✅ 安全修复:只保存用户名,不保存密码(使用 localStorage)
|
|
|
if (this.loginForm.rememberMe) {
|
|
if (this.loginForm.rememberMe) {
|
|
|
- Cookies.set("userName", this.loginForm.userName, { expires: 30 });
|
|
|
|
|
- Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
|
|
|
|
|
- Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
|
|
|
|
|
|
|
+ localStorage.setItem("rememberedUser", this.loginForm.userName);
|
|
|
} else {
|
|
} else {
|
|
|
- Cookies.remove("userName");
|
|
|
|
|
- Cookies.remove("password");
|
|
|
|
|
- Cookies.remove('rememberMe');
|
|
|
|
|
|
|
+ localStorage.removeItem("rememberedUser");
|
|
|
|
|
+ // 清理旧的存储(如果存在)
|
|
|
|
|
+ localStorage.removeItem("userName");
|
|
|
|
|
+ localStorage.removeItem("password");
|
|
|
|
|
+ localStorage.removeItem("rememberMe");
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
this.$store.dispatch("Login", this.loginForm).then(() => {
|
|
this.$store.dispatch("Login", this.loginForm).then(() => {
|
|
|
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
|
|
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
|
|
|
}).catch(() => {
|
|
}).catch(() => {
|