带有淘汰 JS 的隐形验证码



我正在完成不可见的验证码,但是我在实现它时遇到了问题,谷歌开发人员页面中的代码显示它应该是这样的

<button
class="g-recaptcha"
data-sitekey="6Lee9CEUAA....."
data-callback="YourOnSubmitFn">
Submit
</button>

但是我页面上的按钮目前包括 KNOCKOUT js 数据绑定,我用它来调用将 ajax 调用发送到后端的登录函数,但是如果我使用 googles 给定的代码,我不确定如何调用我的 knockout js 文件中的函数。

这是旧代码。

<button type="submit" class="btn btnlogin" data-bind="disable: (loggedIn() == 'true'), click: callLoginFunction">
SIGN IN 
</button>

这是淘汰 js 函数。

self.callLoginFunction= function () {
self.getRecaptchaCode();
$.ajax({
type: 'POST',
url: BASEURL + 'index.php/login/loginUsingAjax/' + auth,
contentType: 'application/json; charset=utf-8',
data: ko.toJSON({
email : self.eMail(),
password : self.passWord(),
recaptcha : self.recaptchaCode()
})
})
.done(function(returnmsg) {
return window.location.href = BASEURL + 'index.php/main/index';
})
.fail(function(jqXHR, textStatus, errorThrown) {
self.loggedIn('failed');
grecaptcha.reset();
})
.always(function(data){
self.passWord(null);                
});

};

所以我想知道如何使用谷歌给出的新代码调用这个函数,我尝试删除data-callback并添加data-bind但工作不行,所以需要帮助。

何塞·路易斯的评论走上了正确的道路!乔治·迪米特里亚迪斯(George Dimitriadis)的想法是正确的,如果你把他们建议的东西结合起来,你就有一个解决方案。

通过点击该链接,您可以了解可以轻松设置 jquery 函数来调用挖空函数。然后你可以设置你的按钮,将那个Jquery函数作为回调函数发送,它只会调用你的KNOCKOUT函数,该函数将发送grecaptcha响应作为其ajax请求的一部分。 所以在你的头标签中,也许创建一个像这样的jquery函数:

<script>
function loginCB() {
yourViewModel.callLoginFunction();
}
</script>

您的视图模型将是您对视图模型实例的命名,例如:

<script>
yourViewModel = new login_vm();
ko.applyBindings(yourViewModel, $("#login")[0]);
</script>

现在创建你的按钮,就像谷歌建议发送新的Jquery函数作为回调函数一样:

<button
class="g-recaptcha"
data-sitekey="6Lee9CEUAA....."
data-callback="loginCB">
Submit
</button>

我通过使用grecaptcha.getResponse()成功地获得了recaptcha响应代码,所以我会像这样更改您的淘汰callLoginFunction:

self.callLoginFunction= function () {
response = grecaptcha.getResponse()
$.ajax({
type: 'POST',
url: BASEURL + 'index.php/login/loginUsingAjax/' + auth,
contentType: 'application/json; charset=utf-8',
data: ko.toJSON({
email : self.eMail(),
password : self.passWord(),
recaptcha : response
})
})
.done(function(returnmsg) {
return window.location.href = BASEURL + 'index.php/main/index';
})
.fail(function(jqXHR, textStatus, errorThrown) {
self.loggedIn('failed');
grecaptcha.reset();
})
.always(function(data){
self.passWord(null);                
});
};

您获取响应代码以随ajax请求一起发送的方式可能很好,我只是看不出您是如何做到的。

我假设您正在询问如何设置 recaptcha 的客户端,所以我假设您知道如何处理您在服务器上发送的 ajax 请求的响应代码。

最新更新