जावास्क्रिप्ट का उपयोग करके ReCaptcha पुनः लोड कैसे करें?


177

मेरे पास AJAX के साथ एक साइनअप फॉर्म है ताकि मैं कभी भी रिकैप्चा इमेज को रिफ्रेश कर सकूं।

मैं जावास्क्रिप्ट का उपयोग करके इसे पुनः लोड करने के लिए ReCaptcha के साथ संगत कोड की तलाश कर रहा हूं।


1
परेशान मत करो। यदि उपयोगकर्ता नाम लिया गया है तो कैप्चा को क्यों बदलें?
SLaks

18
@SLaks : शायद इसलिए कि वह पहले कैप्चा की जाँच करता है और फिर उपयोगकर्ता की जाँच करता है - और एक बार कैप्चा का उपयोग करने के बाद, यह अब वैध नहीं है। दुर्भावनापूर्ण उपयोगकर्ता के आस-पास ऐसा करने से सर्वर को आसानी से दोष हो सकता है और कैप्चा से परेशान हुए बिना क्रूर बल का उपयोग करने वाले सभी उपयोगकर्ताओं की सूची प्राप्त कर सकते हैं।
टॉमाज़ नर्कविक्ज़

1
@TomaszNurkiewicz UPDATE: दुर्भावनापूर्ण उपयोगकर्ता एक से अधिक बार सत्यापन के लिए एक ही पुनः-कैप्चा प्रस्तुत नहीं कर सकेगा। तो नहीं, यहाँ bruteforce संभव नहीं है। कैप्चा को रीफ्रेश करने का कारण केवल उपयोगकर्ता को इसे फिर से दर्ज करने की अनुमति देना है।
टोनी सीपिया

मेरा मानना ​​है कि एक कुशल हमलावर समय हमलों का फायदा उठाने के लिए यह पता लगा सकता है कि बॉट सत्यापन कहां है, इसके आधार पर क्या डेटा गलत है; मैं पहले चेक के रूप में खान रखना पसंद करता हूं और अगर वे विफल हो जाते हैं तो किसी भी चीज को तुरंत अस्वीकार कर देते हैं, मेरे सर्वर पर लोड को कम करने में भी मदद करता है इसलिए मैं डीबी क्वेश्चन नहीं कर रहा हूं जब वे किसी भी तरह से खारिज कर दिए जाएंगे
स्टीव

जवाबों:


29

महत्वपूर्ण: reCAPTCHA API का संस्करण 1.0 अब समर्थित नहीं है, कृपया संस्करण 2.0 में अपग्रेड करें।

आप grecaptcha.reset () का उपयोग कर सकते हैं ; कैप्चा रीसेट करने के लिए।

स्रोत: https://developers.google.com/recaptcha/docs/verify#api-request


370

ReCaptcha v2 के लिए, उपयोग करें:

grecaptcha.reset();

यदि आप reCaptcha v1 का उपयोग कर रहे हैं ( शायद नहीं ):

Recaptcha.reload();

यदि वहाँ पहले से ही लोड किया हुआ रेकप्टा है तो यह करेगा window

(नीचे सेबी की टिप्पणी पर आधारित अपडेट।)


20
नए reCAPTCHA का उपयोग करने वाले किसी के लिए: लाइन अब बदल गई है grecaptcha.reset();( डॉक्यूमेंटेशन )
SebiH

मैं grecaptcha.reset();अपनी प्रतिक्रिया क्षुधा के लिए यह प्रयोग कर रहा हूं, और यह पूरी तरह से काम करता है
yussan

4
अगर आपको यकीन नहीं है कि ग्रेपच्टा लोड हो गया है, तो उपयोग करेंif (window.grecaptcha) grecaptcha.reset();
fred727

हालाँकि यह कैप्चा पुनः लोड करता है, लेकिन कैप्चा प्रतिक्रिया के लिए फ़ील्ड मान हटाया नहीं जाता है, जिससे मेरा फॉर्म वैध हो जाता है।
डेमियन ग्रीन

58

यदि आप संस्करण 1 का उपयोग कर रहे हैं

Recaptcha.reload();

यदि आप संस्करण 2 का उपयोग कर रहे हैं

grecaptcha.reset();

1
स्वीकृत उत्तर को कॉपी किया और 3 साल बाद फिर से तैयार किया। Urg।
पीआर व्हाइटहेड

@PRWhitehead कृपया इतिहास संपादित करें देखें। BTW, डाउन वोट के लिए धन्यवाद।
दासुन

मैंने आपका संपादन नहीं किया है, और आपने पहली बार एपीआई में बदलाव को प्रतिबिंबित करने के लिए स्वीकार किए गए उत्तर को अपडेट करने के 3 महीने बाद इसे जोड़ा है - प्रारंभिक उत्तर की प्रासंगिकता को प्रभावित करने और वर्षों के बाद इसे पहली बार जोड़ा गया था। मैंने इसे अस्वीकृत कर दिया क्योंकि यह स्वीकृत उत्तर अधिक उपयोगी है।
पीआर व्हाइटहेड

2
मैंने इस जवाब को जोड़ा क्योंकि मैंने सामना किया, वही मुद्दा। यद्यपि स्वीकृत उत्तर उस समय सही उत्तर को दर्शाता था, जो पर्याप्त रूप से स्पष्ट नहीं था। कम से कम मेरे लिए, इसीलिए मैंने स्पष्ट पृथक्करण के साथ एक नए उत्तर के रूप में जोड़ने का फैसला किया (स्वीकृत उत्तर संस्करणों के विरुद्ध मतभेदों को नोट करने में विफल रहा)।
दासुन

8
grecaptcha.reset(opt_widget_id)

ReCAPTCHA विजेट को रीसेट करता है। एक वैकल्पिक विजेट आईडी पारित किया जा सकता है, अन्यथा फ़ंक्शन पहले बनाए गए विजेट को रीसेट करता है। (Google के वेब पेज से)


यह केवल पृष्ठ पर पहला कैप्चा रीसेट करता है
मैक्सवेल sc

@ Maxwells.c क्या आपने पोस्ट भी पढ़ी? वैकल्पिक रूप से आप एक विजेट आईडी पास कर सकते हैं और nth विजेट हटा सकते हैं। यदि आप पास नहीं करते हैं, तो पहले वाला रीसेट है।
कुटलिया

1
विजेट आईडी क्या है? मैंने रिकैप्टा <div> के html आईडी में पास होने की कोशिश की, लेकिन "अमान्य रिकैप्चा क्लाइंट आईडी" एक त्रुटि मिली। मुझे लगता है कि मुझे स्पष्ट रूप से विजेट को प्रस्तुत करने की आवश्यकता है, क्योंकि मुझे लगता है कि रेंडर () विधि उस आईडी को वापस करती है जिसकी मुझे आवश्यकता है।
पीट

6

इसे इस्तेमाल करे

<script type="text/javascript" src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>
<script type="text/javascript">
          function showRecaptcha() {
            Recaptcha.create("YOURPUBLICKEY", 'captchadiv', {
              theme: 'red',
              callback: Recaptcha.focus_response_field
            });
          }
 </script>

<div id="captchadiv"></div>

यदि आप showRecaptcha को कॉल करते हैं, तो कैप्चाडीव को एक नए रिकैप्चा उदाहरण के साथ आबाद किया जाएगा।


आप अपना कोड बदल सकते हैं और showRecaptcha ऑनलोड कह सकते हैं? क्या यह आपकी मदद कर रहा है?
टिम

6

या आप ताज़ा बटन पर एक क्लिक का अनुकरण कर सकते हैं

// If recaptcha object exists, refresh it
    if (typeof Recaptcha != "undefined") {
      jQuery('#recaptcha_reload').click();
    }

1
किसी कारण के लिए, Recaptchaऔर grecaptchaमेरे पृष्ठ पर दोनों अपरिभाषित हैं। इसने मेरे लिए काम किया, एक मामूली संशोधन के साथ:if( $("#recaptcha_reload").length > 0 ){ ....
नैट-बिट इंट

मैंने इसका उपयोग तब किया जब ज्ञात किया जाता है कि किसी सरणी के पुनरावृत्ति को उसके तत्वों की गिनती के बिना पूरा किया जाए।
m3nda



2

यदि आप reCAPTCHA API के संस्करण 1.0 का उपयोग कर रहे हैं, तो कृपया संस्करण 2.0 में अपग्रेड करें (संस्करण 1.0 अब समर्थित नहीं है)

grecaptcha.reset();कैप्चा रीसेट करने के लिए उपयोग करें ।


0

यदि आप नए recaptcha 2.0 का उपयोग कर रहे हैं तो इसका उपयोग करें: पीछे के कोड के लिए:

ScriptManager.RegisterStartupScript(this, this.GetType(), "CaptchaReload", "$.getScript(\"https://www.google.com/recaptcha/api.js\", function () {});", true);

सरल जावास्क्रिप्ट के लिए

<script>$.getScript(\"https://www.google.com/recaptcha/api.js\", function () {});</script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.