login with two factor

This commit is contained in:
hamid zarghami
2025-07-27 09:58:00 +03:30
parent b73a265b35
commit 4fd6378ee8
2 changed files with 29 additions and 10 deletions
+3 -1
View File
@@ -244,6 +244,8 @@
"enter_mobile_number": "شماره موبایل خود را وارد کنید",
"try_again": "ارسال مجدد",
"toast_resend_code": "کد جدیدی برای شما ارسال شد",
"old_version": "نسخه قدیمی داشبورد"
"old_version": "نسخه قدیمی داشبورد",
"twoFactorToken": "کد دو مرحله ای",
"enter_twoFactorToken": "کد دو مرحله ای خود را وارد کنید"
}
}
+26 -9
View File
@@ -1,4 +1,4 @@
import { FC } from 'react'
import { FC, useState } from 'react'
import LogoImage from '../../assets/images/logo.svg'
import LogoSmallImage from '../../assets/images/logo-small.svg'
import Input from '../../components/Input'
@@ -16,16 +16,19 @@ import { Paths } from '../../utils/Paths'
type LoginFormType = {
email: string;
password: string;
twoFactorToken?: string;
}
const Login: FC = () => {
const { t } = useTranslation('global')
const loginWithPassword = useLoginWithPassword()
const [showTwoFactor, setShowTwoFactor] = useState(false)
const formik = useFormik<LoginFormType>({
initialValues: {
email: '',
password: ''
password: '',
twoFactorToken: undefined,
},
validationSchema: Yup.object({
email: Yup.string()
@@ -37,14 +40,18 @@ const Login: FC = () => {
onSubmit(values) {
loginWithPassword.mutate(values, {
onSuccess(data) {
setToken(data?.data?.accessToken?.token)
setRefreshToken(data?.data?.refreshToken?.token)
const redirectUrl = getRedirectUrl();
if (redirectUrl) {
window.location.href = redirectUrl;
return;
if (data?.data?.requires2FA) {
setShowTwoFactor(true)
} else {
setToken(data?.data?.accessToken?.token)
setRefreshToken(data?.data?.refreshToken?.token)
const redirectUrl = getRedirectUrl();
if (redirectUrl) {
window.location.href = redirectUrl;
return;
}
window.location.href = Paths.received
}
window.location.href = Paths.received
},
onError(error: ErrorType) {
toast(error?.response?.data?.error?.message[0], 'error')
@@ -104,6 +111,16 @@ const Login: FC = () => {
</div>
</div>
{showTwoFactor && (
<div className='mt-6'>
<Input
label={t('auth.twoFactorToken')}
placeholder={t('auth.enter_twoFactorToken')}
{...formik.getFieldProps('twoFactorToken')}
/>
</div>
)}
<Button
label={t('auth.login')}
className='mt-8'