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:
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:
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:
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