Recently, Google completely overhauled their reCaptcha API and simplified it to a single checkbox.
The problem is, I can submit a form with the reCaptcha included without checking it and the form will ignore the reCaptcha.
Before you had to send the form to a PHP file with the private key et al, but I'm not seeing any mention of that in their Developer's Guide. I have no idea how to validate the form to be sure the new reCaptcha was filled by the user.
Am I missing something? Is that PHP file with the private key still required?
All I have for the reCaptcha so far is:
<div data-type="image" class="g-recaptcha" data-sitekey="My Public Key"></div>
We will use these to validate the Recaptcha. In order to integrate Recaptcha into our HTML page, first, we need to include <div class="g-recaptcha" data-sitekey="site key" > /div> in the form. We replace the site key with our key. Then, we include the Google Recaptcha API to initialize the Recaptcha on our form.
Google does not provide methods to verify site key, neither you can hack/access reCaptcha html code by JS since the reCapthca is in an iframe and frame's code is not programmatically accessible client-side. Its a common mistake to forget to update the allowable domains in the dashboard when pushing a new site live.
If you want to check if the User clicked on the I'm not a robot
checkbox, you can use the .getResponse()
function provided by the reCaptcha API.
It will return an empty string in case the User did not validate himself, something like this:
if (grecaptcha.getResponse() == ""){ alert("You can't proceed!"); } else { alert("Thank you"); }
In case the User has validated himself, the response will be a very long string.
More about the API can be found on this page: reCaptcha Javascript API
You can verify the response in 3 ways as per the Google reCAPTCHA documentation:
g-recaptcha-response
: Once user checks the checkbox (I am not a robot), a field with id g-recaptcha-response
gets populated in your HTML.
You can now use the value of this field to know if the user is a bot or not, using the below mentioed lines:-
var captchResponse = $('#g-recaptcha-response').val(); if(captchResponse.length == 0 ) //user has not yet checked the 'I am not a robot' checkbox else //user is a verified human and you are good to submit your form now
Before you are about to submit your form, you can make a call as follows:-
var isCaptchaValidated = false; var response = grecaptcha.getResponse(); if(response.length == 0) { isCaptchaValidated = false; toast('Please verify that you are a Human.'); } else { isCaptchaValidated = true; } if (isCaptchaValidated ) { //you can now submit your form }
You can display your reCAPTCHA as follows:-
<div class="col s12 g-recaptcha" data-sitekey="YOUR_PRIVATE_KEY" data-callback='doSomething'></div>
And then define the function in your JavaScript, which can also be used to submit your form.
function doSomething() { alert(1); }
Now, once the checkbox (I am not a robot) is checked, you will get a callback to the defined callback, which is doSomething
in your case.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With