我在Joomla 3.6中有一个简单的自定义表单,我已成功添加了reCaptcha。但是,我正在努力验证这一点。
经过几次网络搜索,我可以使用以下代码:
$joomla_captcha = JFactory::getConfig()->get('captcha');
if ( $joomla_captcha != '0') {
$jpost = JFactory::getApplication()->input->post;
$reCaptcha = $jpost->get("g-recaptcha-response");
$dispatcher = JEventDispatcher::getInstance();
$captcha_response = $dispatcher->trigger('onCheckAnswer', $reCaptcha);
}
if ( ! $captcha_response[0] ) {
die("Invalid Captcha");
}
但是,无论验证码是否完成,表格都会通过。
我需要做些什么更改来获取验证码是否通过?
表单非常基本,我不愿意为此验证安装另一个组件。
答案 0 :(得分:0)
好吧,看起来我试图找到一种“Joomla”的方式来调用内置的API方法。
由于我只使用Google reCaptcha,我在Google's site上发现,如果验证码质询尚未完成,则“g-recaptcha-response”字段为空,如果正确完成则不为空。
因此,对于Google reCaptcha,我需要测试“g-recaptcha-response”字段,我的代码示例变为:
$joomla_captcha = JFactory::getConfig()->get('captcha');
if ( $joomla_captcha != '0') {
$jpost = JFactory::getApplication()->input->post;
$reCaptcha = $jpost->get("g-recaptcha-response");
}
if ( isset( $reCaptcha ) && empty( $reCaptcha ) {
die("Invalid Captcha");
}
这显然仅限于谷歌reCaptcha,并且很高兴查询Joomla API层,以提供灵活性但足够好。
修改强>
以下Joomla API调用将返回“true”或“false”到$ completed,表示验证码是否通过
$config = JFactory::getConfig()->get('captcha');
$captcha = JCaptcha::getInstance($config);
$completed = $captcha->CheckAnswer();
if ($completed === false) {
die("Invalid Captcha");
}
优先于早期的方法,因为它可以与其他可能添加到Joomla的验证码插件一起使用。