/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { API, showError, showSuccess } from '../../helpers'; import { Button, Card, Divider, Form, Input, Typography, } from '@douyinfe/semi-ui'; import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; const { Title, Text, Paragraph } = Typography; const TwoFAVerification = ({ onSuccess, onBack, isModal = false }) => { const { t } = useTranslation(); const [loading, setLoading] = useState(false); const [useBackupCode, setUseBackupCode] = useState(false); const [verificationCode, setVerificationCode] = useState(''); const handleSubmit = async () => { if (!verificationCode) { showError(t('请输入验证码')); return; } // Validate code format if (useBackupCode && verificationCode.length !== 8) { showError(t('备用码必须是8位')); return; } else if (!useBackupCode && !/^\d{6}$/.test(verificationCode)) { showError(t('验证码必须是6位数字')); return; } setLoading(true); try { const res = await API.post('/api/user/login/2fa', { code: verificationCode, }); if (res.data.success) { showSuccess(t('登录成功!')); // 保存用户信息到本地存储 localStorage.setItem('user', JSON.stringify(res.data.data)); if (onSuccess) { onSuccess(res.data.data); } } else { showError(res.data.message); } } catch (error) { showError(t('验证失败,请重试')); } finally { setLoading(false); } }; const handleKeyPress = (e) => { if (e.key === 'Enter') { handleSubmit(); } }; if (isModal) { return (
{t('请输入认证器应用显示的验证码完成登录')}
{onBack && ( )}
{t('提示:')}
{t('• 验证码每30秒更新一次')}
{t('• 如果无法获取验证码,请使用备用码')}
{t('• 每个备用码只能使用一次')}
); } return (
{t('两步验证')} {t('请输入认证器应用显示的验证码完成登录')}
{onBack && ( )}
{t('提示:')}
{t('• 验证码每30秒更新一次')}
{t('• 如果无法获取验证码,请使用备用码')}
{t('• 每个备用码只能使用一次')}
); }; export default TwoFAVerification;