사용자가 Google recaptcha에서 확인란을 선택한 js를 확인하는 방법은 무엇입니까?


79

나는 머리의 끝에 다음을 추가했습니다

<script src='https://www.google.com/recaptcha/api.js'></script>

양식이 끝나기 전에 이것을 추가했습니다.

<div class="g-recaptcha" data-sitekey="== xxxxxx =="></div>

https://developers.google.com/recaptcha/ 와 유사한 recaptcha를 볼 수 있습니다.

단, 체크 박스를 체크하지 않고 데이터를 누르면 데이터가 제출됩니다. 사용자가 확인란을 눌렀는지 확인하기 위해 추가해야하는 다른 코드가 있습니까? 잘 만하면 js?



yeep ..이 작업을 수행하는 방법을 알아낼 수없는 것 같습니다
Hello Universe

백엔드 서버에서 요청해야합니다. 브라우저가 혼자서하는 것은 매우 안전하지 않습니다.
다니엘 A. 화이트

괜찮습니다. jquery를 사용하여 프런트 엔드에서 요청하는 방법은 무엇입니까?
Hello Universe

답변:


188

Google에는 확인란이 선택되었을 때 콜백 옵션이 있습니다.

다음을 양식 요소에 추가하십시오.

data-callback="XXX"

예:

<div class="g-recaptcha" data-callback="recaptchaCallback" data-sitekey="== xxxxxx =="></div>

그리고 제출 버튼에 대한 비활성화 속성.

예:

<button id="submitBtn" disabled>Submit</button>

그런 다음 콜백 함수를 만들고 필요한 코드를 작성합니다.

예:

function recaptchaCallback() {
    $('#submitBtn').removeAttr('disabled');
};

1
@mohanenb : 전송을 막기위한 것이지만 평소처럼 서버 측을 확인하지 않는 것은 아닙니다.
하프 비트

2
시간 초과 문제를 해결하는 방법은 무엇입니까? 누군가 reCaptcha를 확인한 다음 몇 분 동안 양식을 제출하지 않으면 reCaptcha가 만료되지만 사용자는 여전히 양식을 제출할 수 있습니다 ..!
Akshay Kapoor


4
captcha 컨트롤이 도달 할 수 있도록 recaptchaCallback () 함수를 document.ready 외부에 배치하는 것입니다. 그렇지 않으면 "ReCAPTCHA에서 사용자가 제공 한 함수를 찾을 수 없습니다 :"와 같은 console.log 오류가 표시됩니다.
ForTheWin

1
이 솔루션은 단순히 보안 문자가 함수를 호출 되어 해결을하지만, 보안 문자가 있는지 여부를 확인하는 기능을 제공하지 않는 해결했다.
João Pimentel Ferreira

71

grecaptcha 객체를 호출하여 확인할 수도 있습니다. grecaptcha.getResponse();선택하지 않으면 비어 있고 선택하면 인증 코드가 있습니다.

grecaptcha.getResponse().length === 0 선택하지 않은 경우

function isCaptchaChecked() {
  return grecaptcha && grecaptcha.getResponse().length !== 0;
}

if (isCaptchaChecked()) {
  // ...
}

그러나 grecaptcha.getResponse ()를 얻는 방법은 무엇입니까?
Nitin Dhomse

Google의 recaptcha를로드하자마자로드됩니다. 패키지의 일부
Olafur Tryggvason

"grecaptcha가 정의되어 있지 catch되지 않은 ReferenceError가가"내가 시도했지만 작동하지 않는, 콘솔 디버그 >> 말한다
silvachathura

스크립트는 비동기 또는에서는 setTimeout와 함께 할 시도, 첫 reCAPTCHA를로드한다
데니스 Klymenko

2
var isCaptchaChecked = (grecaptcha && grecaptcha.getResponse().length !== 0);
jaybro

8

있는지 확인하려면 구글의 reCAPTCHA를가 확인되지 않았거나 다음 코드에 의해 그것을 할 수 있습니다 :

<script>

if(grecaptcha && grecaptcha.getResponse().length > 0)
{
     //the recaptcha is checked
     // Do what you want here
     alert('Well, recaptcha is checked !');
}
else
{
    //The recaptcha is not cheched
    //You can display an error message here
    alert('Oops, you have to check the recaptcha !');
}

</script>

4

google recaptcha v2 가 선택 되었는지 확인하려면 다음 코드로 수행 할 수 있습니다.

var checkCaptch = false;
     var verifyCallback = function(response) {
        if (response == "") {
             checkCaptch = false;
         }
         else {
             checkCaptch = true;
         }
     };
     $(document).ready(function() {
         $("#btnSubmit").click(function() {
             if (checkCaptch && grecaptcha.getResponse()!="") {
                  //Write your success code here
             }
         });
     })

3

브라우저가 작업을 수행하도록하십시오! (slinky2000 답변 기준)

참고 : 이것은 '실수로'확인되지 않은 recaptcha를 보내는 것을 방지하기위한 것입니다. 봇이 신경 쓰지 않기 때문에 여전히 서버 측에서 recaptcha를 확인해야합니다 ...

required=true바로 아래에 속성 이있는 보이지 않는 입력 태그를 추가 합니다 div.g-recaptcha.

<input id='recaptcha_check_empty' required tabindex='-1',
style='width:50px; height:0; opacity:0; pointer-events:none; 
position:absolute; 
bottom:0;'>

위가 recaptcha의 바닥 을 가리 키도록 두 너비 a div를 모두 묶습니다 .position=relative;bottom:0;

이제 브라우저는 요약을 가리키는이 필드를 채우도록 멋지게 요청합니다.

이제 콜백이 필요합니다.

<div class="g-recaptcha" data-callback="recaptchaCallback" ...

function recaptchaCallback() { 
    $('#recaptcha_check_empty').val(1);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.