[优化] 移除 Turnstile 相关功能和配置

This commit is contained in:
ryan
2026-05-31 15:22:30 +08:00
parent 57616626fd
commit 4cb8928e4e
12 changed files with 15 additions and 288 deletions
+4 -14
View File
@@ -21,31 +21,21 @@ export function logout() {
return apiRequest<void>('/user/logout');
}
export function register(payload: RegisterPayload, turnstileToken?: string) {
const query = turnstileToken
? `?turnstile=${encodeURIComponent(turnstileToken)}`
: '';
return apiRequest<void>(`/user/register${query}`, {
export function register(payload: RegisterPayload) {
return apiRequest<void>('/user/register', {
method: 'POST',
body: JSON.stringify(payload),
});
}
export function sendEmailVerification(email: string, turnstileToken?: string) {
export function sendEmailVerification(email: string) {
const searchParams = new URLSearchParams({ email });
if (turnstileToken) {
searchParams.set('turnstile', turnstileToken);
}
return apiRequest<void>(`/verification?${searchParams.toString()}`);
}
export function sendPasswordResetEmail(email: string, turnstileToken?: string) {
export function sendPasswordResetEmail(email: string) {
const searchParams = new URLSearchParams({ email });
if (turnstileToken) {
searchParams.set('turnstile', turnstileToken);
}
return apiRequest<void>(`/reset_password?${searchParams.toString()}`);
}
@@ -1,17 +1,15 @@
'use client';
import { zodResolver } from '@hookform/resolvers/zod';
import { useMutation, useQuery } from '@tanstack/react-query';
import { useMutation } from '@tanstack/react-query';
import Link from 'next/link';
import { useState } from 'react';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import { InlineMessage } from '@/components/feedback/inline-message';
import { TurnstileWidget } from '@/components/forms/turnstile-widget';
import { AppCard } from '@/components/ui/app-card';
import { sendPasswordResetEmail } from '@/features/auth/api/auth';
import { getPublicStatus } from '@/features/auth/api/public';
import {
AuthButton,
AuthFormField,
@@ -26,7 +24,6 @@ const resetRequestSchema = z.object({
type ResetRequestFormValues = z.infer<typeof resetRequestSchema>;
export function PasswordResetRequestForm() {
const [turnstileToken, setTurnstileToken] = useState('');
const [message, setMessage] = useState<{
tone: 'success' | 'danger' | 'info';
text: string;
@@ -37,14 +34,9 @@ export function PasswordResetRequestForm() {
defaultValues: { email: '' },
});
const statusQuery = useQuery({
queryKey: ['public-status'],
queryFn: getPublicStatus,
});
const mutation = useMutation({
mutationFn: (values: ResetRequestFormValues) =>
sendPasswordResetEmail(values.email, turnstileToken || undefined),
sendPasswordResetEmail(values.email),
onSuccess: () => {
setMessage({ tone: 'success', text: '重置邮件发送成功,请检查邮箱。' });
form.reset();
@@ -59,10 +51,6 @@ export function PasswordResetRequestForm() {
const handleSubmit = form.handleSubmit((values) => {
setMessage(null);
if (statusQuery.data?.turnstile_check && !turnstileToken) {
setMessage({ tone: 'info', text: '请先完成人机验证。' });
return;
}
mutation.mutate(values);
});
@@ -86,16 +74,6 @@ export function PasswordResetRequestForm() {
) : null}
</AuthFormField>
{statusQuery.data?.turnstile_check &&
statusQuery.data.turnstile_site_key ? (
<TurnstileWidget
siteKey={statusQuery.data.turnstile_site_key}
onVerify={(token) => setTurnstileToken(token)}
onExpire={() => setTurnstileToken('')}
onError={() => setTurnstileToken('')}
/>
) : null}
{message ? (
<InlineMessage tone={message.tone} message={message.text} />
) : null}
@@ -8,7 +8,6 @@ import { ErrorState } from '@/components/feedback/error-state';
import { InlineMessage } from '@/components/feedback/inline-message';
import { LoadingState } from '@/components/feedback/loading-state';
import { AppModal } from '@/components/ui/app-modal';
import { TurnstileWidget } from '@/components/forms/turnstile-widget';
import { useAuth } from '@/components/providers/auth-provider';
import { PageHeader } from '@/components/layout/page-header';
import { AppCard } from '@/components/ui/app-card';
@@ -71,7 +70,6 @@ const defaultSystemFields = {
EmailVerificationEnabled: false,
GitHubOAuthEnabled: false,
WeChatAuthEnabled: false,
TurnstileCheckEnabled: false,
SMTPServer: '',
SMTPPort: '587',
SMTPAccount: '',
@@ -81,8 +79,6 @@ const defaultSystemFields = {
WeChatServerAddress: '',
WeChatServerToken: '',
WeChatAccountQRCodeImageURL: '',
TurnstileSiteKey: '',
TurnstileSecretKey: '',
};
const defaultOperationFields = {
@@ -257,7 +253,6 @@ export function SettingsPage() {
const [accessToken, setAccessToken] = useState('');
const [emailAddress, setEmailAddress] = useState('');
const [emailCode, setEmailCode] = useState('');
const [emailTurnstileToken, setEmailTurnstileToken] = useState('');
const [authSourceModalOpen, setAuthSourceModalOpen] = useState(false);
const [geoIPTestIP, setGeoIPTestIP] = useState('8.8.8.8');
const [cleanupModalState, setCleanupModalState] =
@@ -325,8 +320,6 @@ export function SettingsPage() {
GitHubClientId: publicStatus.github_client_id || previous.GitHubClientId,
WeChatAccountQRCodeImageURL:
publicStatus.wechat_qrcode || previous.WeChatAccountQRCodeImageURL,
TurnstileSiteKey:
publicStatus.turnstile_site_key || previous.TurnstileSiteKey,
}));
setOtherFields((previous) => ({
...previous,
@@ -364,7 +357,6 @@ export function SettingsPage() {
),
GitHubOAuthEnabled: toBoolean(optionMap.GitHubOAuthEnabled, false),
WeChatAuthEnabled: toBoolean(optionMap.WeChatAuthEnabled, false),
TurnstileCheckEnabled: toBoolean(optionMap.TurnstileCheckEnabled, false),
SMTPServer: optionMap.SMTPServer ?? '',
SMTPPort: optionMap.SMTPPort ?? '587',
SMTPAccount: optionMap.SMTPAccount ?? '',
@@ -374,8 +366,6 @@ export function SettingsPage() {
WeChatServerAddress: optionMap.WeChatServerAddress ?? '',
WeChatServerToken: '',
WeChatAccountQRCodeImageURL: optionMap.WeChatAccountQRCodeImageURL ?? '',
TurnstileSiteKey: optionMap.TurnstileSiteKey ?? '',
TurnstileSecretKey: '',
});
setOperationFields({
@@ -618,16 +608,8 @@ export function SettingsPage() {
return;
}
if (publicStatusQuery.data?.turnstile_check && !emailTurnstileToken) {
setFeedback({ tone: 'info', message: '请先完成人机验证。' });
return;
}
void runBusyAction('email-send', async () => {
await sendEmailVerification(
emailAddress.trim(),
emailTurnstileToken || undefined,
);
await sendEmailVerification(emailAddress.trim());
setFeedback({ tone: 'success', message: '验证码已发送,请检查邮箱。' });
});
};
@@ -974,21 +956,6 @@ export function SettingsPage() {
placeholder="请输入邮箱验证码"
/>
</ResourceField>
{publicStatus.turnstile_check ? (
publicStatus.turnstile_site_key ? (
<TurnstileWidget
siteKey={publicStatus.turnstile_site_key}
onVerify={(token) => setEmailTurnstileToken(token)}
onExpire={() => setEmailTurnstileToken('')}
onError={() => setEmailTurnstileToken('')}
/>
) : (
<EmptyState
title="Turnstile 配置不完整"
description="当前系统已启用 Turnstile,但未配置 Site Key,邮箱绑定暂不可用。"
/>
)
) : null}
<div className="flex flex-wrap gap-2">
<SecondaryButton
type="button"