diff --git a/config/config.go b/config/config.go index 9ed9bfe..47213ed 100644 --- a/config/config.go +++ b/config/config.go @@ -27,5 +27,6 @@ type Config struct { Captcha struct { Type string SiteKey string + Secret string } } diff --git a/frontend/src/apis/apis.ts b/frontend/src/apis/apis.ts index ae89470..89b1b00 100644 --- a/frontend/src/apis/apis.ts +++ b/frontend/src/apis/apis.ts @@ -15,18 +15,19 @@ export async function login(username: string, password: string) { return data as tokenData } -export async function register(email: string, username: string, password: string) { +export async function register(email: string, username: string, password: string, captchaToken: string) { const v = await fetch(import.meta.env.VITE_APIADDR + "/api/v1/user/reg", { - method: "POST", + method: "PUT", body: JSON.stringify({ "Email": email, "Password": password, - "Name": username + "Name": username, + "CaptchaToken": captchaToken }) }) const data = await v.json() if (!v.ok) { - throw data + throw data.msg } return } \ No newline at end of file diff --git a/frontend/src/components/TurnstileWidget.tsx b/frontend/src/components/CaptchaWidget.tsx similarity index 79% rename from frontend/src/components/TurnstileWidget.tsx rename to frontend/src/components/CaptchaWidget.tsx index e221207..98841f4 100644 --- a/frontend/src/components/TurnstileWidget.tsx +++ b/frontend/src/components/CaptchaWidget.tsx @@ -11,7 +11,7 @@ interface prop { onSuccess: ((token: string) => void) } -const TurnstileWidget = memo(({ onSuccess }: prop) => { +function CaptchaWidget({ onSuccess }: prop) { const ref = useRef(null) const [key, setKey] = useState(1) const { data, error, isLoading } = useSWR(import.meta.env.VITE_APIADDR + '/api/v1/captcha') @@ -21,18 +21,24 @@ const TurnstileWidget = memo(({ onSuccess }: prop) => { return {String(error)} } if (isLoading) { - return + return } if (data?.code != 0) { console.warn(error) return {String(data?.msg)} } + if (data.data.type != "turnstile") { + onSuccess("ok") + return <> + } return ( <> ) -}) +} -export default TurnstileWidget \ No newline at end of file +const CaptchaWidgetMemo = memo(CaptchaWidget) + +export default CaptchaWidgetMemo \ No newline at end of file diff --git a/frontend/src/views/Register.tsx b/frontend/src/views/Register.tsx index 34aa619..084dba9 100644 --- a/frontend/src/views/Register.tsx +++ b/frontend/src/views/Register.tsx @@ -16,12 +16,13 @@ import Alert from '@mui/material/Alert'; import Snackbar from '@mui/material/Snackbar'; import Loading from '@/components/Loading' import { useNavigate } from "react-router-dom"; -import TurnstileWidget from '@/components/TurnstileWidget'; +import CaptchaWidget from '@/components/CaptchaWidget'; export default function SignUp() { const [regErr, setRegErr] = useState(""); const [loading, setLoading] = useState(false); const navigate = useNavigate(); + const [captchaToken, setCaptchaToken] = useState(""); const checkList = React.useRef>(new Map()) @@ -40,7 +41,11 @@ export default function SignUp() { setLoading(false) return } - register(d.email ?? "", d.username ?? "", d.password ?? ""). + if (captchaToken == "") { + setLoading(false) + setRegErr("验证码无效") + } + register(d.email ?? "", d.username ?? "", d.password ?? "", captchaToken). then(() => navigate("/login")). catch(v => [setRegErr(String(v)), console.warn(v)]). finally(() => setLoading(false)) @@ -121,7 +126,7 @@ export default function SignUp() { /> - console.log(v)} /> +