JavaScript kullanarak ReCaptcha nasıl yeniden yüklenir?


177

AJAX ile bir kayıt formu var, böylece bir hata oluştuğunda (yani kullanıcı adı zaten kullanımda) Recaptcha görüntüsünü yenilemek istiyorum.

JavaScript kullanarak yeniden yüklemek için ReCaptcha ile uyumlu bir kod arıyorum.


1
Rahatsız etme. Kullanıcı adı alınırsa neden CAPTCHA değiştirilmelidir?
SLaks

18
@SLaks : muhtemelen önce captcha'yı kontrol eder ve sonra kullanıcıyı kontrol eder - ve captcha kullanıldıktan sonra artık geçerli değildir. Bunu kötü niyetli kullanıcı etrafında başka bir şekilde yapmak, sunucuyu kolayca kusurlandırabilir ve captcha ile uğraşmadan kaba kuvvet kullanan tüm kullanıcıların listesini alabilir.
Tomasz Nurkiewicz

1
@TomaszNurkiewicz GÜNCELLEME: kötü niyetli kullanıcı aynı yeniden güvenlik kodunu doğrulama için bir kereden fazla gönderemez. Yani hayır, kaba kuvvet burada mümkün değil. Captcha'yı yenilemenin nedeni, kullanıcının tekrar girmesine izin vermektir.
Tony Sepia

Yetenekli bir saldırgan, bot doğrulamasının nerede olduğuna bağlı olarak hangi verilerin yanlış olduğunu bulmak için zamanlama saldırılarından yararlanabilir; Ben ilk kontrol olarak benim tutmayı tercih ve başarısız olursa hemen bir şey reddetmek, ayrıca yine de reddedilecek zaman DB sorguları yapmıyorum böylece sunucumdaki yükü azaltmak yardımcı olur
Steve Byrne

Yanıtlar:



370

ReCaptcha v2 için şunu kullanın:

grecaptcha.reset();

ReCaptcha v1 kullanıyorsanız ( muhtemelen değil ):

Recaptcha.reload();

Bu, üzerinde zaten yüklü bir Recaptcha varsa yapılacaktır window.

(@ SebiH'nin aşağıdaki yorumuna dayanarak güncellendi.)


20
Yeni reCAPTCHA'yı kullanan herkes için: satır şimdi değişti grecaptcha.reset();( dokümantasyonunda )
SebiH

grecaptcha.reset();benim tepki uygulamalar için kullanıyorum ve mükemmel çalışıyor
yussan

4
grecaptcha'nın yüklendiğinden emin değilseniz, kullanınif (window.grecaptcha) grecaptcha.reset();
fred727

Bu, captcha'yı yeniden yüklese de, captcha yanıtının alan değeri kaldırılmış gibi görünmüyor ve formumu geçerli bırakıyor.
Damian Green

58

Sürüm 1 kullanıyorsanız

Recaptcha.reload();

Sürüm 2 kullanıyorsanız

grecaptcha.reset();

1
Kabul edilen cevabı kopyaladı ve 3 yıl sonra yanıt verdi. Urg.
PR Whitehead

@PRWhitehead Lütfen düzenleme geçmişine bakın. BTW, aşağı oy için teşekkürler.
Dasun

Yaptım, sizinkini düzenlemediniz ve ilk önce kabul edilen yanıtın API'da yapılan bir değişikliği yansıtacak şekilde güncellenmesinden 3 ay sonra - ilk yanıtın alaka düzeyini ve ilk eklendikten sonraki yıllarını eklediniz. Bunu reddettim çünkü kabul edilen cevap daha faydalı.
PR Whitehead

2
Bu yanıtı ekledim çünkü aynı sorunla karşı karşıya kaldım. Kabul edilen cevap o zamanki doğru cevabı yansıtsa da yeterince açık değildi. En azından benim için, bu yüzden net bir ayrılık ile yeni bir cevap olarak eklemeye karar verdim (kabul edilen cevap sürümlere göre farklılıkları not etmekte başarısız oldu).
Dasun

8
grecaptcha.reset(opt_widget_id)

ReCAPTCHA widget'ını sıfırlar. İsteğe bağlı bir pencere öğesi kimliği iletilebilir, aksi takdirde işlev oluşturulan ilk pencere öğesini sıfırlar. (Google'ın web sayfasından)


yalnızca sayfadaki ilk captcha'yı sıfırlar
Maxwell sc

@ Maxwells.c Gönderiyi okudunuz mu? İsteğe bağlı olarak bir widget kimliği iletebilir ve n. Widget'ı silebilirsiniz. Eğer geçmezseniz, birincisi sıfırlanır.
Kutalia

1
Widget kimliği tam olarak nedir? Recdivcha <div> html kimliğini geçmeye çalıştım ama "geçersiz recaptcha istemci kimliği" hatası aldım. Ben render () yöntemi ihtiyacım olan kimliği döndürür düşünüyorum çünkü açıkça widget render gerektiğini düşünüyorum.
Pete

6

Bunu dene

<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'ı çağırırsanız, captchadiv yeni bir recaptcha örneğiyle doldurulur.


kodunuzu değiştirmek ve showRecaptcha onload çağırabilirsiniz? Bu size yardımcı oluyor mu?
Tim

6

Veya sadece yenile düğmesine tıklamayı taklit edebilirsiniz

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

1
Nedense Recaptchave grecaptchaher ikisi de benim sayfamda tanımsız. Bu benim için küçük bir değişiklikle çalıştı:if( $("#recaptcha_reload").length > 0 ){ ....
Nate-Bit Int

Öğelerini saymadan bir dizinin yinelemesinin ne zaman bittiği biliniyordu.
m3nda

3

AngularJS kullanıcıları için:

$window.grecaptcha.reset();

1
Benim durumumda $ olmadan - window.grecaptcha.reset ();
Tony Sepia


2

ReCAPTCHA API'sinin 1.0 Sürümü'nü kullanıyorsanız, lütfen Sürüm 2.0'a yükseltin (Sürüm 1.0 artık desteklenmemektedir)

grecaptcha.reset();Güvenlik kodunu sıfırlamak için kullanın .


0

yeni recaptcha 2.0 kullanıyorsanız bunu kullanın: arkasındaki kod için:

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

basit javascript için

<script>$.getScript(\"https://www.google.com/recaptcha/api.js\", function () {});</script>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.