invisible recaptcha - 挑战没有出现
invisible recaptcha - challenge not appearing
在我们动态生成的表单上实施隐形 reCAPTCHA。我们的 from 引擎从数据库中获取字段列表,并用表单字段动态填充 DOM,显示它,并处理 post。要使用隐形 reCAPTCHA:
当我的页面加载完成时,我正在加载 google api 代码:
<script src="https://www.google.com/recaptcha/api.js?render=explicit" async defer></script>
从数据库加载我的表单后,我将 recaptcha div 注入我的字段列表:
form.fields.push( { html: '<div id="g-recaptcha-div" class="g-recaptcha" data-sitekey="<my site key>" data-badge="inline" data-size="invisible"></div>',
type: 'html'
} );
稍后,我将表单附加到 DOM (jQuery 'appendTo'),然后立即呈现 reCAPTCHA:
recaptcha_id = grecaptcha.render("g-recaptcha-div",
{
'data-callback': _settings.form.submit,
'sitekey' : <my site key>
}, true
);
然后出现表单,并显示 reCAPTCHA badge/protected 图标。查看 DOM 检查器,我可以重新验证 DIV,那里有 'g-recaptcha-response' 文本区域,但它是不可见的。正如我所料。
然后,在我的提交函数中,在我做了一些表单验证之后,我执行了重新验证:
grecaptcha.execute(recaptcha_id);
在这一点上,我希望挑战会突然出现。但事实并非如此。好吧,它有过一次。我的表单提交到我的 PHP 后端,其中有一个 g-recaptcha-response 参数,但它是空的。挑战出现的那一次,在 g-recaptcha-response 中有一个值。
挑战总是应该在调用执行函数时出现吗?如果不是,那么我们应该如何处理空响应值?
谢谢,
安迪
好的,对于那些在家跟随的人:
1) 是的,你可以在对grecaptcha.render的调用中指定回调函数的名称。深入观察,我注意到在此页面 (https://developers.google.com/recaptcha/docs/invisible#js_api) 上我需要像这样指定函数的名称:
recaptcha_id = grecaptcha.render("g-recaptcha-div",
{
'sitekey' : <my site key>,
'callback' : <callback>
}, true
);
我正在尝试使用 "data-callback",这是如何在 HTML 中指定的。呸!并回答我的另一个问题,一旦您正确执行此操作,无论是否呈现挑战,都会使用令牌调用回调。
在我们动态生成的表单上实施隐形 reCAPTCHA。我们的 from 引擎从数据库中获取字段列表,并用表单字段动态填充 DOM,显示它,并处理 post。要使用隐形 reCAPTCHA:
当我的页面加载完成时,我正在加载 google api 代码:
<script src="https://www.google.com/recaptcha/api.js?render=explicit" async defer></script>
从数据库加载我的表单后,我将 recaptcha div 注入我的字段列表:
form.fields.push( { html: '<div id="g-recaptcha-div" class="g-recaptcha" data-sitekey="<my site key>" data-badge="inline" data-size="invisible"></div>',
type: 'html'
} );
稍后,我将表单附加到 DOM (jQuery 'appendTo'),然后立即呈现 reCAPTCHA:
recaptcha_id = grecaptcha.render("g-recaptcha-div",
{
'data-callback': _settings.form.submit,
'sitekey' : <my site key>
}, true
);
然后出现表单,并显示 reCAPTCHA badge/protected 图标。查看 DOM 检查器,我可以重新验证 DIV,那里有 'g-recaptcha-response' 文本区域,但它是不可见的。正如我所料。
然后,在我的提交函数中,在我做了一些表单验证之后,我执行了重新验证:
grecaptcha.execute(recaptcha_id);
在这一点上,我希望挑战会突然出现。但事实并非如此。好吧,它有过一次。我的表单提交到我的 PHP 后端,其中有一个 g-recaptcha-response 参数,但它是空的。挑战出现的那一次,在 g-recaptcha-response 中有一个值。
挑战总是应该在调用执行函数时出现吗?如果不是,那么我们应该如何处理空响应值?
谢谢, 安迪
好的,对于那些在家跟随的人:
1) 是的,你可以在对grecaptcha.render的调用中指定回调函数的名称。深入观察,我注意到在此页面 (https://developers.google.com/recaptcha/docs/invisible#js_api) 上我需要像这样指定函数的名称:
recaptcha_id = grecaptcha.render("g-recaptcha-div",
{
'sitekey' : <my site key>,
'callback' : <callback>
}, true
);
我正在尝试使用 "data-callback",这是如何在 HTML 中指定的。呸!并回答我的另一个问题,一旦您正确执行此操作,无论是否呈现挑战,都会使用令牌调用回调。