Skip to content

Commit

Permalink
Fixed form submission after inclusion of reCAPTCHA token
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianLeChat committed Oct 17, 2023
1 parent 17df018 commit 8a98a89
Showing 1 changed file with 39 additions and 12 deletions.
51 changes: 39 additions & 12 deletions assets/scripts/global.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ import "./analytics";
import { addQueuedNotification } from "./functions";

// Déclaration du contexte global du navigateur.
declare global
{
interface Window
{
declare global {
interface Window {
// Déclaration des traductions injectées par Twig.
edit_port: string;
edit_remove: string;
Expand Down Expand Up @@ -61,7 +59,9 @@ $( "input[type = password]" ).on( "keyup", ( event ) =>
{
// Si les majuscules sont activées, on insère dynamiquement
// un nouvel élément HTML après le champ de saisie.
$( event.target ).next().after( `<p class="capslock">${ window.capslock_enabled }</p>` );
$( event.target )
.next()
.after( `<p class="capslock">${ window.capslock_enabled }</p>` );
}
else
{
Expand Down Expand Up @@ -136,7 +136,12 @@ if ( process.env.RECAPTCHA_ENABLED === "true" )
{
// Une fois terminé, on exécute après une requête de vérification
// afin d'obtenir un jeton de vérification auprès de Google.
resolve( await window.grecaptcha.execute( window.recaptcha_public_key, { action: "submit" } ) );
resolve(
await window.grecaptcha.execute(
window.recaptcha_public_key,
{ action: "submit" }
)
);
} );
} );

Expand All @@ -149,7 +154,7 @@ if ( process.env.RECAPTCHA_ENABLED === "true" )
return oldFetch( url, options );
};

$( "form[method = POST]" ).one( "submit", ( event ) =>
$( "form[method = POST]" ).on( "submit", ( event ) =>
{
// On cesse d'abord le comportement par défaut du formulaire.
event.preventDefault();
Expand All @@ -161,18 +166,40 @@ if ( process.env.RECAPTCHA_ENABLED === "true" )
return;
}

// On supprime l'événement pour éviter de recommencer une nouvelle
// fois ce processus.
$( "form[method = POST]" ).off();

// On attend ensuite que les services de reCAPTCHA soient chargés.
window.grecaptcha.ready( async () =>
{
// Une fois terminé, on exécute après une requête de vérification
// afin d'obtenir un jeton de vérification auprès de Google.
const token = await window.grecaptcha.execute( window.recaptcha_public_key, { action: "submit" } );
const token = await window.grecaptcha.execute(
window.recaptcha_public_key,
{ action: "submit" }
);

// On insère enfin dynamiquement le jeton dans le formulaire
// avant de cliquer une nouvelle fois sur le bouton de soumission.
// On insère alors dynamiquement le jeton dans le formulaire.
const target = $( event.target );
target.append( `<input type="hidden" name="recaptcha" value="${ token }">` );
target.trigger( "submit" );
target.append(
`<input type="hidden" name="recaptcha" value="${ token }">`
);

// On clique enfin sur le bouton de soumission du formulaire
// ou on le soumet directement si l'événement n'est pas issu
// d'un clic sur un bouton.
if ( event.originalEvent )
{
$(
( event.originalEvent as SubmitEvent )
.submitter as HTMLFormElement
).trigger( "click" );
}
else
{
target.trigger( "submit" );
}
} );
} );
}
Expand Down

0 comments on commit 8a98a89

Please sign in to comment.