Joomla 3 reCaptcha 验证

Joomla 3 reCaptcha validation

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

但是,无论验证码是否完成,表单都在传递。

我需要做哪些更改才能确定验证码是否通过?

该表单非常基础,我不愿意再安装另一个用于此验证的组件。

好吧,看来我在尝试找到一种调用内置 API 方法的 "Joomla" 方法时遇到了麻烦。

由于我只使用 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");     
}

这显然仅限于 Google reCaptcha 并且查询 Joomla API 层会很好,而不是允许灵活性但足够好。

编辑

以下 Joomla API 调用将 return "true" 或 "false" 进入 $completed 指示验证码是否通过

$config = JFactory::getConfig()->get('captcha');
$captcha = JCaptcha::getInstance($config);
$completed = $captcha->CheckAnswer();

if ($completed === false) {
    die("Invalid Captcha");
} 

优于早期的方法,因为它将能够与可能添加到 Joomla 的其他验证码插件一起使用。