From f96615110da72c23c039af69cb406d5b38f462aa Mon Sep 17 00:00:00 2001 From: Seefs Date: Thu, 15 Jan 2026 23:19:51 +0800 Subject: [PATCH] fix: the login method cannot be displayed under the aff link. --- web/src/components/auth/LoginForm.jsx | 22 +++++++++++++------ web/src/components/auth/RegisterForm.jsx | 28 ++++++++++++++---------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/web/src/components/auth/LoginForm.jsx b/web/src/components/auth/LoginForm.jsx index d87fc349a..5111f1f68 100644 --- a/web/src/components/auth/LoginForm.jsx +++ b/web/src/components/auth/LoginForm.jsx @@ -17,9 +17,10 @@ along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ -import React, { useContext, useEffect, useRef, useState } from 'react'; +import React, { useContext, useEffect, useMemo, useRef, useState } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { UserContext } from '../../context/User'; +import { StatusContext } from '../../context/Status'; import { API, getLogo, @@ -73,6 +74,7 @@ const LoginForm = () => { const [searchParams, setSearchParams] = useSearchParams(); const [submitted, setSubmitted] = useState(false); const [userState, userDispatch] = useContext(UserContext); + const [statusState] = useContext(StatusContext); const [turnstileEnabled, setTurnstileEnabled] = useState(false); const [turnstileSiteKey, setTurnstileSiteKey] = useState(''); const [turnstileToken, setTurnstileToken] = useState(''); @@ -108,20 +110,26 @@ const LoginForm = () => { localStorage.setItem('aff', affCode); } - const [status] = useState(() => { + const status = useMemo(() => { + if (statusState?.status) return statusState.status; const savedStatus = localStorage.getItem('status'); - return savedStatus ? JSON.parse(savedStatus) : {}; - }); + if (!savedStatus) return {}; + try { + return JSON.parse(savedStatus) || {}; + } catch (err) { + return {}; + } + }, [statusState?.status]); useEffect(() => { - if (status.turnstile_check) { + if (status?.turnstile_check) { setTurnstileEnabled(true); setTurnstileSiteKey(status.turnstile_site_key); } // 从 status 获取用户协议和隐私政策的启用状态 - setHasUserAgreement(status.user_agreement_enabled || false); - setHasPrivacyPolicy(status.privacy_policy_enabled || false); + setHasUserAgreement(status?.user_agreement_enabled || false); + setHasPrivacyPolicy(status?.privacy_policy_enabled || false); }, [status]); useEffect(() => { diff --git a/web/src/components/auth/RegisterForm.jsx b/web/src/components/auth/RegisterForm.jsx index 6dabb516d..7bdc40c6e 100644 --- a/web/src/components/auth/RegisterForm.jsx +++ b/web/src/components/auth/RegisterForm.jsx @@ -17,7 +17,7 @@ along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ -import React, { useContext, useEffect, useRef, useState } from 'react'; +import React, { useContext, useEffect, useMemo, useRef, useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import { API, @@ -51,6 +51,7 @@ import LinuxDoIcon from '../common/logo/LinuxDoIcon'; import WeChatIcon from '../common/logo/WeChatIcon'; import TelegramLoginButton from 'react-telegram-login/src'; import { UserContext } from '../../context/User'; +import { StatusContext } from '../../context/Status'; import { useTranslation } from 'react-i18next'; import { SiDiscord } from 'react-icons/si'; @@ -72,6 +73,7 @@ const RegisterForm = () => { }); const { username, password, password2 } = inputs; const [userState, userDispatch] = useContext(UserContext); + const [statusState] = useContext(StatusContext); const [turnstileEnabled, setTurnstileEnabled] = useState(false); const [turnstileSiteKey, setTurnstileSiteKey] = useState(''); const [turnstileToken, setTurnstileToken] = useState(''); @@ -106,25 +108,29 @@ const RegisterForm = () => { localStorage.setItem('aff', affCode); } - const [status] = useState(() => { + const status = useMemo(() => { + if (statusState?.status) return statusState.status; const savedStatus = localStorage.getItem('status'); - return savedStatus ? JSON.parse(savedStatus) : {}; - }); + if (!savedStatus) return {}; + try { + return JSON.parse(savedStatus) || {}; + } catch (err) { + return {}; + } + }, [statusState?.status]); - const [showEmailVerification, setShowEmailVerification] = useState(() => { - return status.email_verification ?? false; - }); + const [showEmailVerification, setShowEmailVerification] = useState(false); useEffect(() => { - setShowEmailVerification(status.email_verification); - if (status.turnstile_check) { + setShowEmailVerification(!!status?.email_verification); + if (status?.turnstile_check) { setTurnstileEnabled(true); setTurnstileSiteKey(status.turnstile_site_key); } // 从 status 获取用户协议和隐私政策的启用状态 - setHasUserAgreement(status.user_agreement_enabled || false); - setHasPrivacyPolicy(status.privacy_policy_enabled || false); + setHasUserAgreement(status?.user_agreement_enabled || false); + setHasPrivacyPolicy(status?.privacy_policy_enabled || false); }, [status]); useEffect(() => {