2015-12-07 128 views
2

我看了一下這個問題驗證形式的與谷歌驗證碼提交

How to Validate Google reCaptcha on Form Submit

並試圖實現這個問題的答案在我的代碼來驗證我的形式,所以它不會如果驗證碼尚未完成,請提交。

然而沒有任何反應 - 它只是提交表單。

這是我的代碼:

<head> 

     <script type="text/javascript"> 
    var onloadCallback = function() { 
    grecaptcha.render('html_element', { 
     'sitekey' : 'my_site_key' 
    }); 
    }; 
</script> 

</head> 

      <div id="html_element"></div> 
     <br> 

     <input type="submit" value="Submit" onclick="myFunction"> 

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer> 
function myFunction() {  
if(grecaptcha.getResponse() == "") 
    alert("You can't proceed!"); 
else 
    alert("Thank you");} 
</script> 

誰能幫助?

編輯

<html> 
<head> 
     <script type="text/javascript"> 

var onloadCallback = function() { 
    grecaptcha.render('html_element', { 
    'sitekey' : '6LcWjRITAAAAAKCVz8G8WeG3duXwUqgGZSbJ_2lQ' 
    }); 
}; 
onloadCallback(); 

$('form').on('submit', function(e) { 
    if(grecaptcha.getResponse() == "") { 
    e.preventDefault(); 
    alert("You can't proceed!"); 
    } else { 
    alert("Thank you"); 
    } 
}); 
      </script> 
</head> 
<body> 
     <form action="?" method="POST"> 
     <div id="html_element"></div> 
     <br> 
     <input type="submit" value="Submit"> 
    </form> 


<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer> 

</script> 
    </body> 
+1

我不明白你的代碼在所有。什麼事件應該引發IF聲明? –

+0

好吧,所以我忘了在函數中包裝IF語句,檢查我上面的編輯 –

+0

這也行不通。我已在下面發佈了一個工作答案。 –

回答

3

您需要觸發if聲明的事件。如果你正在使用jQuery,你可以做到這一點很容易:

$('form').on('submit', function(e) { 
    if(grecaptcha.getResponse() == "") { 
    e.preventDefault(); 
    alert("You can't proceed!"); 
    } else { 
    alert("Thank you"); 
    } 
}); 

看到這裏的工作例如:JSFiddle

與所有在JavaScript這樣做的問題是,用戶可以很容易僞造的結果,如果他們想要。如果您確實想要檢查用戶是否是機器人,那麼您仍然應該使用reCAPTCHA密鑰對服務器端用戶提交的結果(通過POST)進行比較。

+0

這只是表單的一個附加部分,祕密密鑰仍然會被使用。 但是,這仍然沒有爲我工作,我已經將您的JSFiddle代碼添加到一個新的文檔,無法摸清它。你會看看我上面添加我的新代碼的最新編輯。 –

+0

謝謝。它與谷歌驗證碼2版本。投票。 –

0

這裏是服務器端的解決方案,除了谷歌提供的嵌入代碼之外,不需要jQuery/javascript。

當用戶在您的網站上提交包含reCaptcha的表單時,請在服務器端查找「g-recaptcha-response」POST參數。

然後把你自己的HTTP POST請求此網址:https://www.google.com/recaptcha/api/siteverify

您發送作爲該請求的一部分POST參數爲:

祕密 - 必需。您的網站與reCAPTCHA之間的共享密鑰。

響應 - 必需。由reCAPTCHA提供的用戶響應令牌,驗證您網站上的用戶。

remoteip - 可選。用戶的IP地址。

然後你應該從Google那裏得到這樣的東西,你可以檢查成功。

{ 「成功」:真|假, 「challenge_ts」:時間戳,//挑戰負荷的時間戳(ISO格式YYYY-MM-dd'T'HH:MM:ssZZ) 「主機名」: string,//解決reCAPTCHA的站點的主機名 「error-codes」:[...] //可選 }

如果success = true,則顯示成功消息或重定向到成功頁面。

如果success = false,則再次顯示錶單,並顯示一條消息,指出他們是機器人並請再試一次。

這裏看到更多的信息:

https://developers.google.com/recaptcha/docs/verifyhttp://dotnettec.com/google-recaptcha-example-javascript/

+0

找到這份工作[示例] [1] [1]:http://dotnettec.com/google-recaptcha-example-javascript/ – Julia