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