2017-02-10 154 views
0

我有一个简单的Joomla 3.6自定义表单,我已经添加了reCaptcha成功。但是,我正在努力验证这一点。Joomla 3 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

好吧,看起来我试图找到一个“Joomla”方法来做到这一点,调用内置的API方法打砖墙。

因为我只使用Google reCaptcha,所以我在Google's site上发现如果验证码挑战尚未完成,“g-recaptcha-response”字段为空,如果正确完成,则不为空。

因此,对于谷歌验证码,我需要测试的“G-reCAPTCHA的反应”领域,我的代码示例变为:

$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 Layer改为允许灵活性,但足够好。

编辑

以下的Joomla API调用将返回“真”或“假”到$完成指示验证码是否通过与否

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

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

最好将以前的办法,这将是能够与可能被添加到Joomla的其他验证码插件一起工作。