| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import React, { useEffect, useState } from 'react';
- import { Button, Form, Grid, Header, Image, Segment } from 'semantic-ui-react';
- import { API, showError, showInfo, showSuccess } from '../helpers';
- import Turnstile from 'react-turnstile';
- const PasswordResetForm = () => {
- const [inputs, setInputs] = useState({
- email: '',
- });
- const { email } = inputs;
- const [loading, setLoading] = useState(false);
- const [turnstileEnabled, setTurnstileEnabled] = useState(false);
- const [turnstileSiteKey, setTurnstileSiteKey] = useState('');
- const [turnstileToken, setTurnstileToken] = useState('');
- useEffect(() => {
- let status = localStorage.getItem('status');
- if (status) {
- status = JSON.parse(status);
- if (status.turnstile_check) {
- setTurnstileEnabled(true);
- setTurnstileSiteKey(status.turnstile_site_key);
- }
- }
- }, []);
- function handleChange(e) {
- const { name, value } = e.target;
- setInputs((inputs) => ({ ...inputs, [name]: value }));
- }
- async function handleSubmit(e) {
- if (!email) return;
- if (turnstileEnabled && turnstileToken === '') {
- showInfo('请稍后几秒重试,Turnstile 正在检查用户环境!');
- return;
- }
- setLoading(true);
- const res = await API.get(
- `/api/reset_password?email=${email}&turnstile=${turnstileToken}`
- );
- const { success, message } = res.data;
- if (success) {
- showSuccess('重置邮件发送成功,请检查邮箱!');
- setInputs({ ...inputs, email: '' });
- } else {
- showError(message);
- }
- setLoading(false);
- }
- return (
- <Grid textAlign='center' style={{ marginTop: '48px' }}>
- <Grid.Column style={{ maxWidth: 450 }}>
- <Header as='h2' color='teal' textAlign='center'>
- <Image src='/logo.png' /> 密码重置
- </Header>
- <Form size='large'>
- <Segment>
- <Form.Input
- fluid
- icon='mail'
- iconPosition='left'
- placeholder='邮箱地址'
- name='email'
- value={email}
- onChange={handleChange}
- />
- {turnstileEnabled ? (
- <Turnstile
- sitekey={turnstileSiteKey}
- onVerify={(token) => {
- setTurnstileToken(token);
- }}
- />
- ) : (
- <></>
- )}
- <Button
- color='teal'
- fluid
- size='large'
- onClick={handleSubmit}
- loading={loading}
- >
- 提交
- </Button>
- </Segment>
- </Form>
- </Grid.Column>
- </Grid>
- );
- };
- export default PasswordResetForm;
|