Joomla 3 reCaptcha验证

时间:2017-02-10 17:42:38

标签: joomla recaptcha

我在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");     
}

但是,无论验证码是否完成,表格都会通过。

我需要做些什么更改来获取验证码是否通过?

表单非常基本,我不愿意为此验证安装另一个组件。

1 个答案:

答案 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的验证码插件一起使用。