You need to sign in to do that
Don't have an account?
Pooja GL
Issue with reCaptcha functionality
Hi,
I have a Google reCaptcha class and VF page created separately in the Org. i want to use this reCaptcha on one other VF page (register page) existing on the same org for which I have embedded the below line in the VF page. This is somehow making the captcha images available on the register page, but the functionality is not at all working.
<apex:include pageName="reCAPTCHA"/>
I would need your expertise on this.
I have a Google reCaptcha class and VF page created separately in the Org. i want to use this reCaptcha on one other VF page (register page) existing on the same org for which I have embedded the below line in the VF page. This is somehow making the captcha images available on the register page, but the functionality is not at all working.
<apex:include pageName="reCAPTCHA"/>
I would need your expertise on this.
Thanks
Please find the below codes.
VF page :
<apex:page controller="reCAPTCHA"> <script src='https://www.google.com/recaptcha/api.js'></script> <apex:pageBlock title="Captcha"> <apex:form id="formid"> <apex:pageBlockSection columns="1"> <!-- <apex:pageBlockSectionItem > <apex:outputLabel for="inputName" value="Name"/> <apex:inputText value="{!myName}" id="inputName"/> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem > <apex:outputLabel for="inputEmail" value="Email"/> <apex:inputText value="{!myEmail}" id="inputEmail"/> </apex:pageBlockSectionItem> --> <!-- Show the reCAPTCHA form if they are not yet verified --> <apex:pageBlockSectionItem rendered="false"> <!-- reCAPTCHA verification Source: https://developers.google.com/recaptcha/docs/display --> <script type="text/javascript" src="https://www.google.com/recaptcha/api/challenge?k={!publicKey}"> </script> <noscript> <iframe src="https://www.google.com/recaptcha/api/noscript?k={!publicKey}" height="300" width="500" frameborder="0"></iframe><br/> <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> <textarea name="g-recaptcha-response" rows="3" cols="40"></textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/> </noscript> </apex:pageBlockSectionItem> <apex:pageBlockSectionItem > <apex:commandButton action="{!verify}" value="Check If I'm Human" rendered="{! NOT(verified)}" reRender="formid"/> </apex:pageBlockSectionItem> <!-- Otherwise, they are verified, show a confirmation message --> <apex:pageBlockSectionItem rendered="{!verified}"> <p>reCAPTCHA verification suggests that you're not a 'bot.</p> </apex:pageBlockSectionItem> </apex:pageBlockSection> <div class="g-recaptcha" data-sitekey="6LfZBhwTAAAAAOFFthnln_xT2Z0sUePJ_omPXvVz"></div> </apex:form> </apex:pageBlock> </apex:page>
Controller Class :
/* Public class for reCAPTCHA */ public class reCAPTCHA { /* Configuration */ // The API endpoint for the reCAPTCHA service private static String baseUrl = 'https://www.google.com/recaptcha/api/siteverify'; // The keys you get by signing up for reCAPTCHA for your domain private static String privateKey = '6LfZBhwTAAAAAE1Y7BOIEsPPtBWW_pHslYSEcYca'; public String publicKey { get { return '6LfZBhwTAAAAAOFFthnln_xT2Z0sUePJ_omPXvVz'; } } /* Implementation */ // Simple form fields for the example form public String myName { get; set; } public String myEmail { get; set; } // Create properties for the non-VF component input fields generated // by the reCAPTCHA JavaScript. public String challenge { get { return ApexPages.currentPage().getParameters().get('recaptcha_challenge_field'); } } public String response { get { return ApexPages.currentPage().getParameters().get('g-recaptcha-response'); } } // Whether the submission has passed reCAPTCHA validation or not public Boolean verified { get; private set; } /* Constructor call for reCAPTCHA */ public reCAPTCHA() { this.verified = false; } /* Calling Verify method */ public void verify() { System.debug('reCAPTCHA verification attempt'); // On first page load, form is empty, so no request to make yet /* if ( challenge == null || response == null ) { System.debug('reCAPTCHA verification attempt with empty form'); return null; } HttpResponse r = makeRequest(baseUrl, 'privatekey=' + privateKey + '&remoteip=' + remoteHost + '&challenge=' + challenge + '&response=' + response );*/ HttpResponse r = makeRequest(baseUrl,'secret=' + privateKey +'&response='+response); system.debug('Response'+r); if ( r!= null ) { this.verified = (r.getBody().startsWithIgnoreCase('true')); } if(this.verified) { // If they pass verification, you might do something interesting here // Or simply return a PageReference to the "next" page //return null; } else { // stay on page to re-try reCAPTCHA //return null; } } /* define PageReference reset method */ public PageReference reset() { return null; } /* Private helper methods */ private static HttpResponse makeRequest(string url, string body) { HttpResponse response = null; HttpRequest req = new HttpRequest(); req.setEndpoint(url); req.setMethod('POST'); req.setBody (body); try { Http http = new Http(); if(test.isRunningTest()){ response.setBody('True'); return response; } response = http.send(req); System.debug('reCAPTCHA response: ' + response); System.debug('reCAPTCHA body: ' + response.getBody()); } catch(System.Exception e) { System.debug('ERROR: ' + e); } return response; } /* define remoteHost */ private String remoteHost { get { String ret = '127.0.0.1'; // also could use x-original-remote-host Map<String, String> hdrs = ApexPages.currentPage().getHeaders(); if (hdrs.get('x-original-remote-addr')!= null) ret = hdrs.get('x-original-remote-addr'); else if (hdrs.get('X-Salesforce-SIP')!= null) ret = hdrs.get('X-Salesforce-SIP'); return ret; } } }
I would recommend using LWC and this removes the use of VF page for implementing google recaptcha
https://inevitableyogendra.blogspot.com/2021/09/using-google-recaptcha-v2-in-lightning-web-component.html