Bonjour,

Actuellement en train développer un site sur Cakephp, j'ai implémenter le plugin disponible ici: Plugin captcha. Le plugin affiche bien un captcha, il est possible de "reload" etc etc..
Tout fonctionne bien sauf que le captcha renvoit sans cesse false. C'est à dire que même quand j'écris le captcha juste, il me renvoit un message d'erreur.

Est-ce que quelqu'un à déjà utilisé ce plugin ? Ou bien y'a-t-il un meilleur Plugin ?

Merci d'avance

5 réponses


Lartak
Réponse acceptée

Bonjour.
Le plugin que tu utilises, remonte à 3 ans (voir 2 ans) et est prévu pour CakePHP 1 et je suppose que tu n'utilises pas la version 1 de CakePHP.
Je te recommande donc d'utiliser un plugin plus récent et adapté à la version actuelle de CakePHP, tel que par exemple : CakeDC/reCaptcha.
De plus que, la librairie utilisée dans le plugin que tu utilises actuellement, ne doit plus vraiment concorder avec la librairie actuelle de ReCaptcha.
Et puis, juste une remarque, tu n'utilises pas la méthode show du helper, correctement.
Toi tu fais :

$this->Recaptcha->show('clean');

alors que tu devrais faire :

$this->Recaptcha->show(array('theme' => 'clean'));

Il nous faudrait voir un bout de code car soit c'est un problème du plugin (ce dont je doute)
soit c'est un problème dans ta façon de l'utiliser ou au moins dans la gestion de ta condition ?

Montre nous un peu ton code voir ! :)

Bonjour @Underscreen,

Voici mon code côté controller Contacts:

public $components = array('Recaptcha.Recaptcha');
    public $helpers = array('Recaptcha.Recaptcha');/**/

    //Cette méthode va afficher le formulaire de contact avec une carte google map
    function index(){

        if ($this->request->is('post')){
            if ($this->Contact->send($this->request->data'Contact'])){
                $this->Session->setFlash('Votre formulaire a été correctement envoyé', 'flash_notif', array('type'=>'alert-success'));
                $this->request->data = array();
                $this->redirect(array('controller'=>'contact', 'action'=>'index'));
            }
            else{
                $this->Session->setFlash("Veuillez corriger vos erreurs afin d'envoyer votre mail", 'flash_notif', array('type'=>'alert-danger'));
            }
        }
    }

Ensuite je fais ceci dans ma view contact/index :

<?php
        echo $this->Recaptcha->show('clean');
        echo $this->Recaptcha->error();
      ?>

En ce qui concerne le plugin je l'ai intégré comme indiqué dans la documentation. D'ailleurs, le captcha apparaît, on peut le "refresh" et aussi écouter le captcha audio. Mon soucis, c'est que le beforeValidates de mon plugin renvoi toujours false. Le code du BeforeValidate du plugin:

<?php
class ValidationBehavior extends ModelBehavior {
    function beforeValidate(Model $model, $options = array()) {
        $model->validate'recaptcha_response_field'] = array(
            'checkRecaptcha' => array(
                'rule' => array('checkRecaptcha', 'recaptcha_challenge_field'),
                'required' => true,
                'message' => 'Veuilez réinscrire le texte.',
            ),
        );
    }
    function checkRecaptcha(&$model, $data, $target) {
        App::import('Vendor', 'Recaptcha.recaptchalib');
        Configure::load('Recaptcha.key');
        $privatekey = Configure::read('Recaptcha.Private');
        $res = recaptcha_check_answer(
            $privatekey, $_SERVER'REMOTE_ADDR'],
            $model->data$model->alias]$target], $data'recaptcha_response_field']
        );
        return $res->is_valid;
    }
}
?>

MERCI ! En utilisant le plugin de CakeDC et en suivant la README, tout fonctionne. Merci^^
Cordialement,
The-Devil

De rien, avec plaisir. ;)