I would like to make my own website, where I use reCAPTCHA. However, I don’t know how to wait after grecaptcha.execute() until the user has completed the tasks. Because now the link is called directly without passing the tasks. For the rest I use the standard Google Script https://developers.google.com/recaptcha/docs/invisible It is the reCAPTCHA v2 invisible.
I would be happy about answers.
<script src="https://www.google.com/recaptcha/api.js" async defer></script> <script> function onSubmit(token) { grecaptcha.execute().then(var vslg = document.getElementById("vslg").value; window.location.replace("url"); } </script> </head> <body> <a class="button"></a> <div class="topBar"> </div> <div class="underTopBar"> <form action="JavaScript:onSubmit()" class="flex-itemform form" method="POST" id="formV"> <table> <tr> <td> <div> <input type="text" id="vslg" required> </div> </td> <td> <div> <div class="g-recaptcha" data-sitekey="..." data-callback="onSubmit" data-size="invisible"> </div> <input type="submit" class="buttonDesign" value="Senden"> </div> </td> <tr> </table> </form> </div>
Advertisement
Answer
The following code does this:
- The
<button class="g-recaptcha"...
is the Automatically bind the challenge to a button. It will automatically trigger the invisible recaptcha when the button is clicked. - Once the recaptcha is completed it will add a hidden field named
g-recaptcha-response
which contains the token and then run theonSubmit
callback which submits the form.
<head> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script> function onSubmit() { document.getElementById("formV").submit(); } </script> </head> <body> <a class="button"></a> <div class="topBar"> </div> <div class="underTopBar"> <form class="flex-itemform form" method="POST" id="formV"> <table> <tr> <td> <div> <button class="g-recaptcha buttonDesign" data-sitekey="..." data-callback="onSubmit" data-size="invisible">Senden</button> </div> </td> <tr> </table> </form> </div>
Important: You still need to verify the token g-recaptcha-response
server side. See Verifying the user’s response. Without verifying the token, adding the recaptcha to the frontend doesn’t stop anyone from submitting the form.