【发布时间】:2015-07-28 07:00:31
【问题描述】:
我环顾四周,没有看到任何特定于 recaptcha 2.0 的内容,所以让我们看看我是否可以得到一些帮助。
我正在设置一个包含多个表单的注册/登录页面。为了提高安全性,我正在安装 recaptcha 2.0。
它适用于单个表单以及在加载时呈现。
对于登录表单,我只想在尝试/限制失败后部署 recaptcha 2.0。
看来我已经在服务器端进行了正确的设置,并且我得到了关于登录延迟和重新验证部署的正确响应。
但现在正在显示验证码。
我正在尝试关注these instructions
我已经做了几次尝试,包括:
-将recaptcha持有者设置为display:none并且仅在触发时显示
- 仅在触发时附加 recaptcha 脚本。
我认为问题出在 head 标签上的 recaptcha 配置上,但我看不到如何将其配置为由 ajax 调用触发。
这是我目前所拥有的:
1 - 在<head> 标签上显式调用recaptcha:
<script type="text/javascript">
var widgetId1;
var widgetId2;
var onloadCallback = function() {
// Renders the HTML element with id 'example1' as a reCAPTCHA widget.
// The id of the reCAPTCHA widget is assigned to 'widgetId1'.
widgetId1 = grecaptcha.render('captcha_signup', {
'sitekey' : 'mysitekey'
});
widgetId2 = grecaptcha.render('captcha_signin', {
'sitekey' : 'mysitekey'
});
};
</script>
2 - 登录表单:
<div id="login">
<form action="" name="login_form" method="post" id="login_form" >
<div class="contact">
<input id="focus2" data-validation="email" data-validation-error-msg="SVP, tapez un address mail valide" class="inp" name="email" size="35" type="text" placeholder="Votre e-mail" />
</div>
<div class="contact">
<input id="pass_in" type="password" name="pass_confirmation" data-validation="length" data-validation-length="8-15" data-validation-error-msg="SVP minimum 8 caracteres" placeholder="Votre mot de passe" class="inp" size="15" />
</div>
<span id="a_recovery">Mot de passe oubliee?</span>
<div id="captcha_holder"> <div id="captcha_signin" style="display:none"></div> </div>
<div class="form_sub">
<input class="sub inp" name="submit" type="submit" value="Valider" />
</div>
</form>
3 - 提交/处理错误/部署recaptcha的ajax调用
<script>
$(document).ready(function(){
$('#login_form').submit(function(e) {
var str = $("#login_form").serialize();
$.ajax({
url: "used_dataentry.php",
type: "POST",
dataType:"text",
data:'code='+'login'+'&'+str,
success: function (data) {
var msg0 = data.substring(0, 4);
var msg1 = data.substring(4);
if ( msg0 == 'msg4' || msg0 == 'msg5') { //this to show recaptcha
alert(msg0);
$("#captcha_signin").show();
}
else{ alert(msg1)};
}
});
e.preventDefault(); //STOP default action
});
});
</script>
【问题讨论】: