如何获得点击验证码的响应作为变量
how to get response of clicked captcha as a variable
我想在我的登录页面中包含 google 验证码。
通常,我从各种输入中收集变量,然后使用 ajax
将它们发送到 prologin.php
进行处理。
但是不知道如何得到clicked
验证码的响应,什么样的响应是可能的(true
,false
,或者...什么?),到也处理它们。
login.php
<script src='https://www.google.com/recaptcha/api.js'></script>
<input type='text'...>
<input type='checkbox'...>
<div class="g-recaptcha" data-sitekey="6Ld..."></div>
<div id='btnlogin'>LOGIN</div>
login.js
$('#btnlogin').click(function(){
var a = ...;
var b = ...;
var captchaResponse = ...; // what ?
$.ajax({
url: 'prologin.php',
...
});
有什么帮助吗?
Google recaptcha 的响应以名称 g-recaptcha-response
发送。这也是输入(文本区域)的 class 名称和 ID。所以你可以试试这些:
$('#g-recaptcha-response').val();
$('form .g-recaptcha-response').val();
$('form [name="g-recaptcha-response"]').val();
您必须使用 grecaptcha.getResponse()
才能获得用户的响应。作为旁注,使用 grecaptcha.reset()
要求最终用户再次使用 reCAPTCHA 进行验证。
$('#btnlogin').click(function(){
var a = ...;
var b = ...;
var captchaResponse = grecaptcha.getResponse();
$.ajax({
url: 'prologin.php',
...
});
...
});
引用如下:https://developers.google.com/recaptcha/docs/verify
Update(1):
是的,您必须将用户的响应发送到后端 PHP 页面 prologin.php 并在那里进行验证。粗略地说,您的 AJAX 和后端 PHP 代码将如下所示:
AJAX:
$('#btnlogin').click(function(){
var a = ...;
var b = ...;
var captchaResponse = grecaptcha.getResponse();
$.ajax({
type: 'POST',
url: 'prologin.php',
data: {a: a, b: b, captchaResponse: captchaResponse};
success: function(data) {
// reset the reCaptcha
grecaptcha.reset();
},
error: function(jqXHR, textStatus, errorThrown){
// error
}
});
...
});
prologin.php
<?php
//your site secret key
$secret = 'YOUR_SECRET_KEY';
if(isset($_POST['captchaResponse']) && !empty($_POST['captchaResponse'])){
//get verified response data
$param = "https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$_POST['captchaResponse'];
$verifyResponse = file_get_contents($param);
$responseData = json_decode($verifyResponse);
if($responseData->success){
// success
}else{
// failure
}
}
?>
我想在我的登录页面中包含 google 验证码。
通常,我从各种输入中收集变量,然后使用 ajax
将它们发送到 prologin.php
进行处理。
但是不知道如何得到clicked
验证码的响应,什么样的响应是可能的(true
,false
,或者...什么?),到也处理它们。
login.php
<script src='https://www.google.com/recaptcha/api.js'></script>
<input type='text'...>
<input type='checkbox'...>
<div class="g-recaptcha" data-sitekey="6Ld..."></div>
<div id='btnlogin'>LOGIN</div>
login.js
$('#btnlogin').click(function(){
var a = ...;
var b = ...;
var captchaResponse = ...; // what ?
$.ajax({
url: 'prologin.php',
...
});
有什么帮助吗?
Google recaptcha 的响应以名称 g-recaptcha-response
发送。这也是输入(文本区域)的 class 名称和 ID。所以你可以试试这些:
$('#g-recaptcha-response').val();
$('form .g-recaptcha-response').val();
$('form [name="g-recaptcha-response"]').val();
您必须使用 grecaptcha.getResponse()
才能获得用户的响应。作为旁注,使用 grecaptcha.reset()
要求最终用户再次使用 reCAPTCHA 进行验证。
$('#btnlogin').click(function(){
var a = ...;
var b = ...;
var captchaResponse = grecaptcha.getResponse();
$.ajax({
url: 'prologin.php',
...
});
...
});
引用如下:https://developers.google.com/recaptcha/docs/verify
Update(1):
是的,您必须将用户的响应发送到后端 PHP 页面 prologin.php 并在那里进行验证。粗略地说,您的 AJAX 和后端 PHP 代码将如下所示:AJAX:
$('#btnlogin').click(function(){
var a = ...;
var b = ...;
var captchaResponse = grecaptcha.getResponse();
$.ajax({
type: 'POST',
url: 'prologin.php',
data: {a: a, b: b, captchaResponse: captchaResponse};
success: function(data) {
// reset the reCaptcha
grecaptcha.reset();
},
error: function(jqXHR, textStatus, errorThrown){
// error
}
});
...
});
prologin.php
<?php
//your site secret key
$secret = 'YOUR_SECRET_KEY';
if(isset($_POST['captchaResponse']) && !empty($_POST['captchaResponse'])){
//get verified response data
$param = "https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$_POST['captchaResponse'];
$verifyResponse = file_get_contents($param);
$responseData = json_decode($verifyResponse);
if($responseData->success){
// success
}else{
// failure
}
}
?>