Refactor captcha token usage in authentication
The handling of the captcha token was decentralized and moved into each individual authentication component. All components that use a captcha token now import and use their own tokens from the 'useCaptchaToken()' hook, improving individual component autonomy. This change simplifies the hierarchical structure and reduces dependencies.
This commit is contained in:
@@ -22,15 +22,16 @@ import { If } from '@kit/ui/if';
|
|||||||
import { Input } from '@kit/ui/input';
|
import { Input } from '@kit/ui/input';
|
||||||
import { Trans } from '@kit/ui/trans';
|
import { Trans } from '@kit/ui/trans';
|
||||||
|
|
||||||
|
import { useCaptchaToken } from '../captcha/client';
|
||||||
|
|
||||||
export function MagicLinkAuthContainer({
|
export function MagicLinkAuthContainer({
|
||||||
inviteToken,
|
inviteToken,
|
||||||
redirectUrl,
|
redirectUrl,
|
||||||
captchaToken,
|
|
||||||
}: {
|
}: {
|
||||||
inviteToken?: string;
|
inviteToken?: string;
|
||||||
captchaToken?: string;
|
|
||||||
redirectUrl: string;
|
redirectUrl: string;
|
||||||
}) {
|
}) {
|
||||||
|
const { captchaToken, resetCaptchaToken } = useCaptchaToken();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const signInWithOtpMutation = useSignInWithOtp();
|
const signInWithOtpMutation = useSignInWithOtp();
|
||||||
|
|
||||||
@@ -63,6 +64,8 @@ export function MagicLinkAuthContainer({
|
|||||||
success: t(`auth:sendLinkSuccessToast`),
|
success: t(`auth:sendLinkSuccessToast`),
|
||||||
error: t(`auth:errors.link`),
|
error: t(`auth:errors.link`),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
resetCaptchaToken();
|
||||||
};
|
};
|
||||||
|
|
||||||
if (signInWithOtpMutation.data) {
|
if (signInWithOtpMutation.data) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { PasswordSignInForm } from './password-sign-in-form';
|
|||||||
export const PasswordSignInContainer: React.FC<{
|
export const PasswordSignInContainer: React.FC<{
|
||||||
onSignIn?: (userId?: string) => unknown;
|
onSignIn?: (userId?: string) => unknown;
|
||||||
}> = ({ onSignIn }) => {
|
}> = ({ onSignIn }) => {
|
||||||
const { captchaToken } = useCaptchaToken();
|
const { captchaToken, resetCaptchaToken } = useCaptchaToken();
|
||||||
const signInMutation = useSignInWithEmailPassword();
|
const signInMutation = useSignInWithEmailPassword();
|
||||||
const isLoading = signInMutation.isPending;
|
const isLoading = signInMutation.isPending;
|
||||||
|
|
||||||
@@ -33,9 +33,11 @@ export const PasswordSignInContainer: React.FC<{
|
|||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// wrong credentials, do nothing
|
// wrong credentials, do nothing
|
||||||
|
} finally {
|
||||||
|
resetCaptchaToken();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[captchaToken, onSignIn, signInMutation],
|
[captchaToken, onSignIn, resetCaptchaToken, signInMutation],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -9,20 +9,21 @@ import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert';
|
|||||||
import { If } from '@kit/ui/if';
|
import { If } from '@kit/ui/if';
|
||||||
import { Trans } from '@kit/ui/trans';
|
import { Trans } from '@kit/ui/trans';
|
||||||
|
|
||||||
|
import { useCaptchaToken } from '../captcha/client';
|
||||||
import { AuthErrorAlert } from './auth-error-alert';
|
import { AuthErrorAlert } from './auth-error-alert';
|
||||||
import { PasswordSignUpForm } from './password-sign-up-form';
|
import { PasswordSignUpForm } from './password-sign-up-form';
|
||||||
|
|
||||||
interface EmailPasswordSignUpContainerProps {
|
interface EmailPasswordSignUpContainerProps {
|
||||||
onSignUp?: (userId?: string) => unknown;
|
onSignUp?: (userId?: string) => unknown;
|
||||||
emailRedirectTo: string;
|
emailRedirectTo: string;
|
||||||
captchaToken?: string;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function EmailPasswordSignUpContainer({
|
export function EmailPasswordSignUpContainer({
|
||||||
onSignUp,
|
onSignUp,
|
||||||
emailRedirectTo,
|
emailRedirectTo,
|
||||||
captchaToken,
|
|
||||||
}: EmailPasswordSignUpContainerProps) {
|
}: EmailPasswordSignUpContainerProps) {
|
||||||
|
const { captchaToken, resetCaptchaToken } = useCaptchaToken();
|
||||||
|
|
||||||
const signUpMutation = useSignUpWithEmailAndPassword();
|
const signUpMutation = useSignUpWithEmailAndPassword();
|
||||||
const redirecting = useRef(false);
|
const redirecting = useRef(false);
|
||||||
const loading = signUpMutation.isPending || redirecting.current;
|
const loading = signUpMutation.isPending || redirecting.current;
|
||||||
@@ -48,9 +49,18 @@ export function EmailPasswordSignUpContainer({
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
|
} finally {
|
||||||
|
resetCaptchaToken();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[captchaToken, emailRedirectTo, loading, onSignUp, signUpMutation],
|
[
|
||||||
|
captchaToken,
|
||||||
|
emailRedirectTo,
|
||||||
|
loading,
|
||||||
|
onSignUp,
|
||||||
|
resetCaptchaToken,
|
||||||
|
signUpMutation,
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import { If } from '@kit/ui/if';
|
|||||||
import { Separator } from '@kit/ui/separator';
|
import { Separator } from '@kit/ui/separator';
|
||||||
import { Trans } from '@kit/ui/trans';
|
import { Trans } from '@kit/ui/trans';
|
||||||
|
|
||||||
import { useCaptchaToken } from '../captcha/client';
|
|
||||||
import { MagicLinkAuthContainer } from './magic-link-auth-container';
|
import { MagicLinkAuthContainer } from './magic-link-auth-container';
|
||||||
import { OauthProviders } from './oauth-providers';
|
import { OauthProviders } from './oauth-providers';
|
||||||
import { EmailPasswordSignUpContainer } from './password-sign-up-container';
|
import { EmailPasswordSignUpContainer } from './password-sign-up-container';
|
||||||
@@ -28,7 +27,6 @@ export function SignUpMethodsContainer(props: {
|
|||||||
inviteToken?: string;
|
inviteToken?: string;
|
||||||
}) {
|
}) {
|
||||||
const redirectUrl = getCallbackUrl(props);
|
const redirectUrl = getCallbackUrl(props);
|
||||||
const { captchaToken } = useCaptchaToken();
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -37,17 +35,13 @@ export function SignUpMethodsContainer(props: {
|
|||||||
</If>
|
</If>
|
||||||
|
|
||||||
<If condition={props.providers.password}>
|
<If condition={props.providers.password}>
|
||||||
<EmailPasswordSignUpContainer
|
<EmailPasswordSignUpContainer emailRedirectTo={redirectUrl} />
|
||||||
captchaToken={captchaToken}
|
|
||||||
emailRedirectTo={redirectUrl}
|
|
||||||
/>
|
|
||||||
</If>
|
</If>
|
||||||
|
|
||||||
<If condition={props.providers.magicLink}>
|
<If condition={props.providers.magicLink}>
|
||||||
<MagicLinkAuthContainer
|
<MagicLinkAuthContainer
|
||||||
inviteToken={props.inviteToken}
|
inviteToken={props.inviteToken}
|
||||||
redirectUrl={redirectUrl}
|
redirectUrl={redirectUrl}
|
||||||
captchaToken={captchaToken}
|
|
||||||
/>
|
/>
|
||||||
</If>
|
</If>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user