Mot de passe à retrouver avec recaptchalib.
Résolu/FerméMax747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 21 oct. 2022 à 18:16
- Echec de la validation recaptcha
- Voir mot de passe wifi android - Guide
- Mot de passe administrateur - Guide
- Trousseau mot de passe iphone - Guide
- Identifiant et mot de passe - Guide
- Réinitialiser pc sans mot de passe - Guide
7 réponses
18 oct. 2022 à 14:34
bonjour,
peut-être remplacer
$answers [error-codes]
par
$answers ['error-codes']
18 oct. 2022 à 15:46
Merci pour ta réponse et de t'intéresser à ce problème.
Mais cela ne fonctionne pas. Car bien que le message d'erreur n'apparaît plus avec ta solution, on ne passe pas à la page suivante qui est celle où on doit inscrire le code de validation reçu par e-mails lors de la validation précédente.
En fait l'utilisateur ne reçoit pas d'e-mail de ce formulaire présenté à partir de la ligne 258 du fichier recuperation.php :
<!--************************** Envoi de l'e-mail ************************************************************--> <?php } else { ?> <b><span style="color:black;font-size:20px;">Inscrivez votre e-mail.</br> Puis cliquez sur "Je ne suis pas un robot". Et validez.</span></b></br></br></br> <form id="passe" method="post"> <fieldset> <legend>Votre e-mail :</legend> </br> <input type="email" placeholder="Votre adresse mail" name="recup_mail" size="50" maxlength="50" /><br/><br/> <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div> <br/> <input type="submit" value="Valider" name="recup_submit"/> </fieldset> </form> </br> <?php if(isset($captcha)) { echo $captcha; } else { echo ""; } ?>
Et si mon analyse est bonne, l'envoi du formulaire correctement rempli devrait avoir pour effet de rendre la condition en ligne 22 vrai :
if ($resp != null && $resp->success) { exit("<br/> Stop"); if(isset($_POST['recup_submit'],$_POST['recup_mail'])) {//Si un e-mail est présent et que "valider" est appuyé on passe ligne suivante.
Mais cependant, elle ne l'est pas car le code ne s'arrête pas à la ligne suivante représenté par:
exit("<br/> Stop");
Par contre la condition de la ligne 17 est vrai car il se produit bien un arrêt de la lecture du script en ligne 18 comme ceci:
if(isset($_POST["g-recaptcha-response"])) { exit("<br/> Stop"); $resp = $reCaptcha->verifyResponse(
C'est ainsi que je soupçonne les lignes 18 à 20:
$resp = $reCaptcha->verifyResponse( $_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"]
de faire partie de la cause de ce dysfonctionnement.
Si je ne me trompe, je n'en comprends pas pour autant les raisons.
Peut être aurais tu une idée?
18 oct. 2022 à 19:00
Je crois comprendre que tu soupçonnes le if en ligne 22.
Pour analyser cela, il faudrait faire "var_dump($resp);", par exemple juste avant la ligne 22.
19 oct. 2022 à 10:47
Ok.Voici le script ajouté juste avant la ligne 22:
(Ici en ligne 7 ci dessous)
$reCaptcha = new ReCaptcha($secret); if(isset($_POST["g-recaptcha-response"])) { $resp = $reCaptcha->verifyResponse( $_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"] ); var_dump($resp); if ($resp != null && $resp->success) {
Je n'ai pas eu de réponse à cela.
Mais le message d'erreur qui s'affiche:
Fatal error: Uncaught Error: Undefined constant "error" in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recaptchalib.php:125 Stack trace: #0 /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recuperation.php(20): ReCaptcha->verifyResponse('2a01:cb0c:2e1:4...', '03AIIukzhGkEVnP...') #1 {main} thrown in /customers/6/0/9/jeuxechecs.fr/httpd.www/echecs/recaptchalib.php on line 125
Il renvoi à la même ligne que le précédent message d'erreur affiché lors de mon premier message.
J'ai un autre formulaire ici:
https://jeuxechecs.fr/formulaire.php
Dont voici la présentation:
Et présente lui aussi un message d'erreur que voici:
Fatal error: Uncaught Error: Undefined constant "error" in /customers/6/0/9/jeuxechecs.fr/httpd.www/recaptchalib.php:124 Stack trace: #0 /customers/6/0/9/jeuxechecs.fr/httpd.www/formulaire.php(39): ReCaptcha->verifyResponse('2a01:cb0c:2e1:4...', '03AIIukzgGt9oz9...') #1 {main} thrown in /customers/6/0/9/jeuxechecs.fr/httpd.www/recaptchalib.php on line 124
<?php /** * This is a PHP library that handles calling reCAPTCHA. * - Documentation and latest version * https://developers.google.com/recaptcha/docs/php * - Get a reCAPTCHA API Key * https://www.google.com/recaptcha/admin/create * - Discussion group * http://groups.google.com/group/recaptcha * * @copyright Copyright (c) 2014, Google Inc. * @link http://www.google.com/recaptcha * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ /** * A ReCaptchaResponse is returned from checkAnswer(). */ class ReCaptchaResponse { public $success; public $errorCodes; } class ReCaptcha { private static $_signupUrl = "https://www.google.com/recaptcha/admin"; private static $_siteVerifyUrl = "https://www.google.com/recaptcha/api/siteverify"; private $_secret; private static $_version = "php_1.0"; /** * Constructor. * * @param string $secret shared secret between site and ReCAPTCHA server. */ function ReCaptcha($secret) { if ($secret == null || $secret == "") { die("To use reCAPTCHA you must get an API key from <a href='" . self::$_signupUrl . "'>" . self::$_signupUrl . "</a>"); } $this->_secret=$secret; } /** * Encodes the given data into a query string format. * * @param array $data array of string elements to be encoded. * * @return string - encoded request. */ private function _encodeQS($data) { $req = ""; foreach ($data as $key => $value) { $req .= $key . '=' . urlencode(stripslashes($value)) . '&'; } // Cut the last '&' $req=substr($req, 0, strlen($req)-1); return $req; } /** * Submits an HTTP GET to a reCAPTCHA server. * * @param string $path url path to recaptcha server. * @param array $data array of parameters to be sent. * * @return array response */ private function _submitHTTPGet($path, $data) { $req = $this->_encodeQS($data); $response = file_get_contents($path . $req); return $response; } /** * Calls the reCAPTCHA siteverify API to verify whether the user passes * CAPTCHA test. * * @param string $remoteIp IP address of end user. * @param string $response response string from recaptcha verification. * * @return ReCaptchaResponse */ public function verifyResponse($remoteIp, $response) { // Discard empty solution submissions if ($response == null || strlen($response) == 0) { $recaptchaResponse = new ReCaptchaResponse(); $recaptchaResponse->success = false; $recaptchaResponse->errorCodes = 'missing-input'; return $recaptchaResponse; } $getResponse = $this->_submitHttpGet( self::$_siteVerifyUrl, array ( 'secret' => $this->_secret, 'remoteip' => $remoteIp, 'v' => self::$_version, 'response' => $response ) ); $answers = json_decode($getResponse, true); $recaptchaResponse = new ReCaptchaResponse(); if (trim($answers ['success']) == true) { $recaptchaResponse->success = true; } else { $recaptchaResponse->success = false; $recaptchaResponse->errorCodes = $answers [error-codes]; } return $recaptchaResponse; } } ?>
Je trouve qu'il est curieux d'obtenir un message presque identique pour 2 formulaires différents mais avec un fichier commun placé à deux endroits différents de mon site.
L'un ici: www/echecs/recaptchalib.php
Et l'autre à la racine là: www/recaptchalib.php
Quelles conclusions peut on en tirer?
Merci.
19 oct. 2022 à 11:17
Conclusion: tu n'as pas appliqué la suggestion en #1.
19 oct. 2022 à 11:30
C'est à dire?
Quelle suggestion en 1?
19 oct. 2022 à 12:12
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question19 oct. 2022 à 12:26
****************************************************************
C'est à dire?
Quelle suggestion en #1?
19 oct. 2022 à 12:48
As-tu cliqué sur le lien: #1?
19 oct. 2022 à 13:09
Ha ok j'ai compris avec #1 !
Alors pour en revenir à ta question, je t'ai répondu hier à 15h46 en t'indiquant que cela ne fonctionne pas.
Car bien que le message d'erreur n'apparaît plus avec ta solution, on ne passe pas à la page suivante qui est celle où on doit inscrire le code de validation reçu par e-mails lors de la validation précédente.
19 oct. 2022 à 13:40
C'est nécessaire, peut-être pas suffisant.
21 oct. 2022 à 18:16
Ce n'était pas suffisant.
C'est ainsi que je me suis orienté vers une version plus récente du Captcha.
La version 3 plus exactement. Donc j'ai trouvé les fichiers accompagnés des explications ici:
Cerise sur le gâteau, le présentateur (sans doute un enseignant) possède une bonne pédagogie!
Il est aussi bien sympathique!
Les fichiers adaptés à mon site sur les questions du jeu d' échec (Q-C-M) fonctionnent sur celui ci.
Il me reste à les adapter désormais sur mon site pour jouer aux échecs par correspondance.
Ce qui ne saurait tarder.
Voilà. Je voulais faire partager cette expérience à tous les amateurs passionnés d'informatique.
Et notamment sur les sites web.
La question est finalement résolue pour moi.
Cordialement.