Joomla 3-reCaptcha验证

Joomla 3-reCaptcha验证,joomla,recaptcha,Joomla,Recaptcha,我在Joomla 3.6中有一个简单的自定义表单,我已成功地将reCaptcha添加到该表单中。然而,我正在努力验证这一点 通过几次网络搜索,我可以找到以下代码: $joomla_captcha = JFactory::getConfig()->get('captcha'); if ( $joomla_captcha != '0') { $jpost = JFactory::getApplication()->input->post; $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");     
}
但是,无论验证码是否完成,表单都会传递

我需要做哪些更改来确定是否通过了验证码


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

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

由于我只使用Google reCaptcha,我在上发现,如果验证码质询未完成,“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");     
}
这显然仅限于GoogleRecaptcha,如果能够查询JoomlaAPI层,以允许灵活性,那就太好了

编辑

以下Joomla API调用将把“true”或“false”返回到$completed中,指示验证码是否通过

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

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

与之前的方法相比更可取,因为它能够与可能添加到Joomla的其他captcha插件一起工作

警告:Joomla\CMS\Captcha\Captcha::checkAnswer()缺少参数1
@mickmackusa,Joomla代码中存在一个“bug”,因为ReCaptcha插件不需要该参数,但内置的Captcha类方法需要该参数。这将在PHP7中生成警告。如果从表单输入传递参数,解决方法是测试该参数是否为空,并传递一个无效值。如果另一个链接中的家伙将此作为其代码的源代码,那就太好了!请加上你的2美分。(也请参见用户之前的问题——他已经努力完成这项任务有一段时间了)……我希望您能提供帮助。好的,我很想去,但没什么要补充的。上面的代码对我有效,看起来他已经找到了解决方案。