2017-02-10 155 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的其他驗證碼插件一起工作。