fix: extract loginToken using URLSearchParams (#275)

It's more robust than a regex and also works with extras queries.

Signed-off-by: Hugo Renard <hugo.renard@protonmail.com>
This commit is contained in:
Hugo Renard
2025-01-14 13:01:33 +01:00
committed by GitHub
parent 1ca029fe94
commit 5ed5a88225

View File

@@ -47,7 +47,7 @@ const LoginPage = () => {
const translate = useTranslate(); const translate = useTranslate();
const base_url = allowSingleBaseUrl ? restrictBaseUrl : localStorage.getItem("base_url"); const base_url = allowSingleBaseUrl ? restrictBaseUrl : localStorage.getItem("base_url");
const [ssoBaseUrl, setSSOBaseUrl] = useState(""); const [ssoBaseUrl, setSSOBaseUrl] = useState("");
const loginToken = /\?loginToken=([a-zA-Z0-9_-]+)/.exec(window.location.href); const loginToken = new URLSearchParams(window.location.search).get("loginToken")
const [loginMethod, setLoginMethod] = useState<LoginMethod>("credentials"); const [loginMethod, setLoginMethod] = useState<LoginMethod>("credentials");
useEffect(() => { useEffect(() => {
@@ -55,10 +55,12 @@ const LoginPage = () => {
return; return;
} }
const ssoToken = loginToken[1]; console.log("SSO token is", loginToken);
console.log("SSO token is", ssoToken);
// Prevent further requests // Prevent further requests
window.history.replaceState({}, "", window.location.href.replace(loginToken[0], "#").split("#")[0]); const previousUrl = new URL(window.location.toString())
previousUrl.searchParams.delete("loginToken")
previousUrl.hash = ""
window.history.replaceState({}, "", previousUrl.toString());
const baseUrl = localStorage.getItem("sso_base_url"); const baseUrl = localStorage.getItem("sso_base_url");
localStorage.removeItem("sso_base_url"); localStorage.removeItem("sso_base_url");
if (baseUrl) { if (baseUrl) {
@@ -66,10 +68,10 @@ const LoginPage = () => {
base_url: baseUrl, base_url: baseUrl,
username: null, username: null,
password: null, password: null,
loginToken: ssoToken, loginToken,
}; };
console.log("Base URL is:", baseUrl); console.log("Base URL is:", baseUrl);
console.log("SSO Token is:", ssoToken); console.log("SSO Token is:", loginToken);
console.log("Let's try token login..."); console.log("Let's try token login...");
login(auth).catch(error => { login(auth).catch(error => {
alert( alert(