From 1398827d0e0c8afe073287e1d7fd3ee166d1ee12 Mon Sep 17 00:00:00 2001 From: luke Date: Mon, 2 Jun 2025 17:19:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=99=BB=E5=BD=95=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/login.html | 1 + scripts/config.js | 2 + scripts/login.js | 103 +++++++++++++++++++++++++++------------------- 3 files changed, 64 insertions(+), 42 deletions(-) diff --git a/pages/login.html b/pages/login.html index b990280..2b1108f 100644 --- a/pages/login.html +++ b/pages/login.html @@ -55,6 +55,7 @@
+ diff --git a/scripts/config.js b/scripts/config.js index 6c0e88b..da99a0b 100644 --- a/scripts/config.js +++ b/scripts/config.js @@ -97,3 +97,5 @@ function loadMergedConfig() { }); }); } + +window.loadMergedConfig = loadMergedConfig; diff --git a/scripts/login.js b/scripts/login.js index 718c0d1..680df61 100644 --- a/scripts/login.js +++ b/scripts/login.js @@ -1,53 +1,72 @@ -// 自动回显 AnythingLLM 密码 -document.addEventListener("DOMContentLoaded", function () { + +document.addEventListener("DOMContentLoaded", async function () { + const config = await window.loadMergedConfig(); + const loginConf = config.apiConfig.login || {}; + + const loginUrl = loginConf.url; + const reqParams = loginConf.requestParams || []; + const resParams = loginConf.responseParams || []; + + // 提取字段名(带默认值) + const reqUsernameField = reqParams.find(p => p.label.includes("用户名"))?.field || "username"; + const reqPasswordField = reqParams.find(p => p.label.includes("密码"))?.field || "password"; + const resTokenField = resParams.find(p => p.label.includes("Token"))?.field || "token"; + const resUsernameField = resParams.find(p => p.label.includes("用户名"))?.field || "username"; + + // 自动填充 LLM 密码(与登录无关,只是附带存储) chrome.storage.local.get(["llmPassword"], function (res) { if (res.llmPassword) { document.getElementById("llmPassword").value = res.llmPassword; } }); -}); -document.getElementById("loginBtn").addEventListener("click", doLogin); -document.addEventListener("keydown", (e) => { - if (e.key === "Enter") doLogin(); -}); + document.getElementById("loginBtn").addEventListener("click", doLogin); + document.addEventListener("keydown", (e) => { + if (e.key === "Enter") doLogin(); + }); -function doLogin() { - const username = document.getElementById("username").value.trim(); - const password = document.getElementById("password").value.trim(); - const llmPassword = document.getElementById("llmPassword").value; - const errorBox = document.getElementById("errorBox"); - errorBox.textContent = ""; + function doLogin() { + const username = document.getElementById("username").value.trim(); + const password = document.getElementById("password").value.trim(); + const llmPassword = document.getElementById("llmPassword").value; + const errorBox = document.getElementById("errorBox"); + errorBox.textContent = ""; - if (!username || !password) { - errorBox.textContent = "请输入用户名和密码"; - return; - } + if (!username || !password) { + errorBox.textContent = "请输入用户名和密码"; + return; + } - // 保存 llmPassword(登录不依赖LLM密码是否填写,只是单独存储) - chrome.storage.local.set({ llmPassword }); + chrome.storage.local.set({ llmPassword }); - fetch("http://app.wisdompulse.cn/api/v1/user/login", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ username, password }) - }) - .then(res => res.json().then(data => ({ status: res.status, body: data }))) - .then(({ status, body }) => { - if (status === 200 && body.token) { - // 登录成功,保存登录时间 - chrome.storage.local.set({ - token: body.token, - username: body.username || username, - loginAt: Date.now() - }, () => { - window.location.href = chrome.runtime.getURL("pages/popup.html"); - }); - } else { - errorBox.textContent = body.message || "登录失败"; - } + const requestBody = {}; + requestBody[reqUsernameField] = username; + requestBody[reqPasswordField] = password; + + fetch(loginUrl, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(requestBody) }) - .catch(() => { - errorBox.textContent = "网络错误,请稍后重试"; - }); -} + .then(res => res.json().then(data => ({ status: res.status, body: data }))) + .then(({ status, body }) => { + const token = body[resTokenField]; + const returnedUser = body[resUsernameField] || username; + + if (status === 200 && token) { + chrome.storage.local.set({ + token: token, + username: returnedUser, + loginAt: Date.now() + }, () => { + window.location.href = chrome.runtime.getURL("pages/popup.html"); + }); + } else { + errorBox.textContent = body.message || "登录失败"; + } + }) + .catch(() => { + errorBox.textContent = "网络错误,请稍后重试"; + }); + } +});