fix: removes re-triggering of OTP provisioning (#14050)

Fixes : [13846 ](https://github.com/twentyhq/twenty/issues/13846)

---------

Co-authored-by: Paul Rastoin <45004772+prastoin@users.noreply.github.com>
Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu>
This commit is contained in:
hc11h
2025-09-09 15:05:04 +05:30
committed by GitHub
parent fe27f321a9
commit ef68236735
3 changed files with 30 additions and 15 deletions
@@ -1,9 +1,10 @@
import { currentUserState } from '@/auth/states/currentUserState';
import { qrCodeState } from '@/auth/states/qrCode';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { gql, useMutation } from '@apollo/client';
import { useLingui } from '@lingui/react/macro';
import { useEffect } from 'react';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { useRecoilState, useRecoilValue } from 'recoil';
import { isDefined } from 'twenty-shared/utils';
const INITIATE_OTP_PROVISIONING_FOR_AUTHENTICATED_USER = gql`
@@ -16,8 +17,9 @@ const INITIATE_OTP_PROVISIONING_FOR_AUTHENTICATED_USER = gql`
export const TwoFactorAuthenticationSetupForSettingsEffect = () => {
const { enqueueErrorSnackBar } = useSnackBar();
const qrCode = useRecoilValue(qrCodeState);
const setQrCodeState = useSetRecoilState(qrCodeState);
const [qrCode, setQrCode] = useRecoilState(qrCodeState);
const currentUser = useRecoilValue(currentUserState);
const { t } = useLingui();
const [initiateOTPProvisioningForAuthenticatedUser] = useMutation(
@@ -25,7 +27,7 @@ export const TwoFactorAuthenticationSetupForSettingsEffect = () => {
);
useEffect(() => {
if (isDefined(qrCode)) {
if (!isDefined(currentUser) || isDefined(qrCode)) {
return;
}
@@ -41,7 +43,7 @@ export const TwoFactorAuthenticationSetupForSettingsEffect = () => {
throw new Error('No URI returned from OTP provisioning');
}
setQrCodeState(
setQrCode(
initiateOTPProvisioningResult.data
.initiateOTPProvisioningForAuthenticatedUser.uri,
);
@@ -57,10 +59,14 @@ export const TwoFactorAuthenticationSetupForSettingsEffect = () => {
};
handleTwoFactorAuthenticationProvisioningInitiation();
// Two factor authentication provisioning only needs to run once at mount
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}, [
enqueueErrorSnackBar,
initiateOTPProvisioningForAuthenticatedUser,
t,
setQrCode,
qrCode,
currentUser,
]);
return <></>;
};