javascriptrecaptchainvisible-recaptcha

How to wait until the user finished the tasks after grecaptcha.execute()? reCAPTCHA v2 invisible


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>  

Solution

  • The following code does this:

    1. 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.
    2. Once the recaptcha is completed it will add a hidden field named g-recaptcha-response which contains the token and then run the onSubmit 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.