IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Recaptcha des fois validé sans raison [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Par défaut Recaptcha des fois validé sans raison
    Bonjour,

    J'ai voulu ajouter un captcha pour mon formulaire de contact, j'ai entendu du bien de reCaptcha et j'ai donc cherché un bundle qui me faciliterait le travail. J'ai trouvé le bundle EWZRecaptchaBundle (http://knpbundles.com/excelwebzone/EWZRecaptchaBundle), j'ai suivi la doc pour l'installation et à priori ça semblait marcher parfaitement, quand je met n'importe quoi il me le refuse et quand je met ce qui est marqué sur l'image ça fonctionne.

    Malheureusement, j'ai constaté aujourd'hui que des fois lorsque l'on met un mot qui s'approche beaucoup du vrai mot (genre "skymim" au lieu de "skymin" donc une letre de différece) et bien il me le valide quand même...alors que normalement il ne devrait pas...(enfin j'imagine qu'il ne devrait pas x) )

    Voici la fonction de mon controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    public function showAction(){
     
            $formBuilderContact = $this->createFormBuilder()
                ->add('mail','email', array('attr'=> array('class' => 'form-control')))
                ->add('subject','text', array('attr'=> array('class' => 'form-control')))
                ->add('content','textarea', array('attr'=> array('class' => 'form-control')))
                ->add('recaptcha', 'ewz_recaptcha', array(
                    'constraints'   => array(
                        new True()
                    )));
            $formContact = $formBuilderContact->getForm();
     
            $request = $this->get('request');
            if ($request->getMethod() == 'POST') {
     
                $formContact->handleRequest($request);
     
                if ($formContact->isValid()) {
     
                    $mail    = htmlentities($formContact->get('mail')->getData());
                    $subject = htmlentities($formContact->get('subject')->getData());
                    $content = htmlentities($formContact->get('content')->getData());
     
                    if($subject === null || $content === null || $mail === null || $subject == "" || $content == "" || $mail == "" ){
                        $this->get('session')->getFlashBag()->add(
                            'notification-danger',
                            'Veuillez indiquer votre adresse mail, un sujet et un contenu au formulaire de contact'
                        );
     
                        return $this->render('InAppsPassWayBundle:Contact:show.html.twig', array(
                            'formContact' => $formContact->createView()
                        ));
     
                    }
     
                    //on vérifie aussi que l'adresse mail est une adresse valide
                    $emailConstraint = new EmailConstraint();
                    $errors = $this->get('validator')->validateValue(
                        $mail,
                        $emailConstraint
                    );//$errors vide si le mail est valide
     
                    if(count($errors) > 0){
                        //il y a des erreurs, l'adresse mail n'est pas valide
                        $this->get('session')->getFlashBag()->add(
                            'notification-danger',
                            'Veuillez indiquer une adresse email valide'
                        );
     
                        return $this->render('InAppsPassWayBundle:Contact:show.html.twig', array(
                            'formContact' => $formContact->createView()
                        ));
                    }
     
                    //sinon on envoie le mail de contact
                    $message = \Swift_Message::newInstance()
                        ->setSubject('Pass-Way, demande de contact')
                        ->setFrom('no-reply@pass-way.net')
                        ->setTo($this->_mailContact)
                        ->setContentType('text/html')
                        ->setBody($this->renderView('InAppsPassWayBundle:Contact:mail.html.twig', array(
                            'mail_expediteur' => $mail,
                            'content'         => $content
                        )),
                        'text/html')
                    ;
                    $this->get('mailer')->send($message);
     
                    //et on redirige vers la même page avec une notification
                    $this->get('session')->getFlashBag()->add(
                        'success',
                        'Votre demande de contact a bien été prise en compte, nous vous recontacterons le plus rapidement possible.'
                    );
     
                    return $this->redirect($this->generateUrl('in_apps_contact'));
                }
            }
     
            return $this->render('InAppsPassWayBundle:Contact:show.html.twig', array(
                'formContact' => $formContact->createView()
            ));
     
        }
    Ma vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <div class="well">
            <form method="post" {{ form_enctype(formContact) }}>
     
                <div>
                    {# Les erreurs générales du formulaire. #}
                    <div style="color:red;">{{ form_errors(formContact) }}</div>
                </div>
     
                <div>
                    {{ form_label(formContact.subject,'Votre email :') }}
                    <div style="color:red;">{{ form_errors(formContact.mail) }}</div>
                    {{ form_widget(formContact.mail) }}
     
                    <br />
     
                    {{ form_label(formContact.subject,'Sujet :') }}
                    <div style="color:red;">{{ form_errors(formContact.subject) }}</div>
                    {{ form_widget(formContact.subject) }}
     
                    <br />
     
                    {{ form_label(formContact.subject,'Message :') }}
                    <div style="color:red;">{{ form_errors(formContact.content) }}</div>
                    {{ form_widget(formContact.content, { 'attr': {'style': 'min-height:250px;'} } ) }}
     
                    <br />
     
                    <div style="color:red;">{{ form_errors(formContact.recaptcha) }}</div>
                    {{ form_widget(formContact.recaptcha) }}
     
                    <br />
     
                    <input type="submit" value="Envoyer" class="btn btn-primary" />
     
                    {{ form_rest(formContact) }}
                </div>
            </form>
        </div>
    Pour la config du bundle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ewz_recaptcha:
         public_key:   
         private_key:  
         locale_key:   %locale%
         enabled:      true
    Avec bien entendu les clés privées et publiques de remplacées par ce que j'ai eu sur le site =)

    Merci d'avance pour votre aide,

    Jonathan

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    Recaptcha vérifie que tu n'es pas un robot.
    Ça ne veux pas dire que le mot tapé est exactement ce qui est affiché. ils ont peut être choisit de laisser une marge d'erreur humaine possible pour ne pas embêter trop l'utilisateur.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Par défaut
    Yep c’est aussi ce à quoi j'ai pensé, mais j'aimerais en être certain ^^"

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    La solution proposé par gototog me paraît la plus cohérente et totalement plausible.

    Différencier un 'm' d'un 'n' parfois c'est carrément chaud, donc si tu te plantes une seule fois sur ce genre de lettre, ben ça passe;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Par défaut
    Yep, je pense aussi qu'il se peut q'il laisse passer quand ce qui est trouvé est très similaire. Mais bon je sais pas ça me choque un peu quand même Oo

    Voici par exemple quelques moment où j'ai tapé ce qu'il y avait à gauche plutôt que ce qu'il y avait à droite et qu'il m'a laissé passer :
    2613 / 2623
    2012 / 3012
    esideae amt / esideae and

    Sachant qu'il y a quand même beaucoup de fois où il m’envoie chier, je ne trouve rien qui parle de ça, c'est pour ça que je me demandais si c'était normal ou pas ^^, m'enfin je passe en résolu si quelqu'un a plus d'infos qu'il n'hésite pas à partager.

    Merci bien pour vos conseils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/05/2012, 11h30
  2. [JMeter] Des unités qui se bloquent sans raison
    Par Arnica dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 28/12/2010, 12h43
  3. Valider des données automatiquement sans ENTER
    Par five1966 dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/06/2008, 20h47
  4. Réponses: 1
    Dernier message: 12/06/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo