php - फॉर्म सबमिट पर Google reCaptcha को कैसे मान्य करें




html (8)

Google सबमिट करें सत्यापित करें कि फ़ॉर्म सबमिट होने के बाद वैध है या नहीं

if ($post['g-recaptcha-response']) {
      $captcha = $post['g-recaptcha-response'];
      $secretKey = 'type here private key';
      $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=" . $secretKey . "&response=" . $captcha);
        $responseKeys = json_decode($response, true);
        if (intval($responseKeys["success"]) !== 1) {
            return "failed";
        } else {
            return "success";
        }
    }
    else {
        return "failed";
    }

हाल ही में, Google ने पूरी तरह से अपने reCaptcha API को ओवरहॉल किया और इसे एक सिंगल चेकबॉक्स में सरलीकृत किया।

समस्या यह है कि, मैं बिना जाँच के शामिल किए गए reCaptcha के साथ एक फॉर्म जमा कर सकता हूँ और यह प्रपत्र reCaptcha की उपेक्षा करेगा।

इससे पहले कि आपको निजी कुंजी एट अल के साथ PHP फ़ाइल में फ़ॉर्म भेजना था, लेकिन मैं उनके डेवलपर गाइड में इसका कोई उल्लेख नहीं देख रहा हूं। मुझे पता नहीं है कि उपयोगकर्ता द्वारा भरे गए नए reCaptcha को सुनिश्चित करने के लिए फ़ॉर्म को कैसे मान्य किया जाए।

क्या मैं कुछ भूल रहा हूँ? क्या निजी कुंजी के साथ PHP फ़ाइल अभी भी आवश्यक है?

मेरे पास अब तक के सभी पुनर्चक्रण हैं:

<div data-type="image" class="g-recaptcha" data-sitekey="My Public Key"></div>

UX के नजरिए से, यह उपयोगकर्ता को यह बताने में मदद कर सकता है कि वे कब फॉर्म जमा करने के लिए आगे बढ़ सकते हैं - या तो एक अक्षम बटन को सक्षम करके, या केवल बटन को दृश्यमान बनाते हुए।

यहाँ एक सरल उदाहरण है ...

<form>
    <div class="g-recaptcha" data-sitekey="YOUR_PRIVATE_KEY" data-callback="recaptchaCallback"></div>
    <button type="submit" class="btn btn-default hidden" id="btnSubmit">Submit</button>
</form>

<script>
    function recaptchaCallback() {
        var btnSubmit = document.getElementById("btnSubmit");

        if ( btnSubmit.classList.contains("hidden") ) {
            btnSubmit.classList.remove("hidden");
            btnSubmitclassList.add("show");
        }
    }
</script>

आप पहले सामने वाले पक्ष में सत्यापित कर सकते हैं कि चेकबॉक्स चिह्नित है:

    var recaptchaRes = grecaptcha.getResponse();
    var message = "";

    if(recaptchaRes.length == 0) {
        // You can return the message to user
        message = "Please complete the reCAPTCHA challenge!";
        return false;
    } else {
       // Add reCAPTCHA response to the POST
       form.recaptchaRes = recaptchaRes;
    }

और फिर सर्वर साइड में Google reCAPTCHA API का उपयोग करके प्राप्त प्रतिक्रिया को सत्यापित करें:

    $receivedRecaptcha = $_POST['recaptchaRes'];
    $verifiedRecaptcha = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$google_secret.'&response='.$receivedRecaptcha);

    $verResponseData = json_decode($verifiedRecaptcha);

    if(!$verResponseData->success)
    {
        return "reCAPTCHA is not valid; Please try again!";
    }

अधिक जानकारी के लिए आप Google डॉक्स पर जा सकते हैं।


इस लिंक को आज़माएं: https://github.com/google/ReCAPTCHA/tree/master/php

इस पृष्ठ का लिंक इस पृष्ठ के नीचे स्थित है: https://developers.google.com/recaptcha/intro

एक समस्या यह आई कि इन दोनों फाइलों को सही तरीके से काम करने से रोकने के लिए वेबसाइट के लिए मेरी php.ini फाइल थी। सुनिश्चित करें कि यह संपत्ति ठीक से सेटअप है, निम्नानुसार है: allow_url_fopen = On


जावास्क्रिप्ट का उपयोग करते समय यह मेरे लिए काम करेगा

<script src='https://www.google.com/recaptcha/api.js'></script>
<script>
function submitUserForm() {
    var response = grecaptcha.getResponse();
    if(response.length == 0) {
        document.getElementById('g-recaptcha-error').innerHTML = '<span style="color:red;">This field is required.</span>';
        return false;
    }
    return true;
}
 
function verifyCaptcha() {
    document.getElementById('g-recaptcha-error').innerHTML = '';
}
</script>
<form method="post" onsubmit="return submitUserForm();">
    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY" data-callback="verifyCaptcha"></div>
    <div id="g-recaptcha-error"></div>
    <input type="submit" name="submit" value="Submit" />
</form>


यदि आप यह जांचना चाहते हैं कि उपयोगकर्ता ने I'm not a robot .getResponse() I'm not a robot चेकबॉक्स पर क्लिक I'm not a robot , तो आप .getResponse() API द्वारा प्रदान किए गए .getResponse() फ़ंक्शन का उपयोग कर सकते हैं।

उपयोगकर्ता द्वारा स्वयं को मान्य नहीं किए जाने पर यह एक रिक्त स्ट्रिंग लौटाएगा, ऐसा कुछ:

if (grecaptcha.getResponse() == ""){
    alert("You can't proceed!");
} else {
    alert("Thank you");
}

यदि उपयोगकर्ता ने स्वयं को मान्य किया है, तो प्रतिक्रिया बहुत लंबी स्ट्रिंग होगी।

एपीआई के बारे में इस पृष्ठ पर पाया जा सकता है: reCaptcha जावास्क्रिप्ट एपीआई


var googleResponse = $('#g-recaptcha-response').val();

if(googleResponse=='')
{   
    $("#texterr").html("<span>Please check reCaptcha to continue.</span>");

    return false;
}

var googleResponse = jQuery('#g-recaptcha-response').val();
if (!googleResponse) {
    $('<p style="color:red !important" class=error-captcha"><span class="glyphicon glyphicon-remove " ></span> Please fill up the captcha.</p>" ').insertAfter("#html_element");
    return false;
} else {            
    return true;
}

इसे किसी फंक्शन में रखें। इस फ़ंक्शन को सबमिट पर कॉल करें ... #html_element मेरी रिक्त div है।





recaptcha