Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: Personne...
Auteur Sujet: problème de récupération de mot de passe

JxSDev

Messages: 23

Salut à tous ! 
je suis entrain de faire un site commercial pour mon projet de fin d'étude , et j'ai "presque" terminé
sauf que j'ai rencontré un petit problème au niveau de la réinitialisation du mot de passe oublié..
Pour ce faire, j'ai créé deux pages, forget.php et reset.php
la première pour faire entrer l'email du client et vérifier si il existe vraiment , si oui, un email de récuperation de mot de passe lui sera envoyé, en cliquant sur le lien il sera redirigé vers reset.php pour creer un nouveau mot de passe.
le problème se situe au niveau de la premiere étape, c'est que même si le client existe dans ma base de données , ça m'afficher "ce client n'existe pas" , c'est le msg d'erreur que j'ai créé, et j'ignore vraiment la cause Confus ... donc voila pourquoi je suis venue vers vous pour m'aider à percer ce petit mystère -.- 
je vais vous montrer maintenant tout le code de cette partie.

forget.php
<?php
   require 'inc/bootstrap.php';
   if(!empty($_POST) && !empty($_POST['email'])){
      $db = App::getDatabase();
      $auth = App::getAuth();
      $session = Session::getInstance();
      if($auth->resetPassword($db, $_POST['email'])){
         $session->setFlash('success', 'Les instructions du rappel de mot de passe vous ont été envoyées par email');
         App::redirect('login.php');
      }else{
         $session->setFlash('danger', 'Aucun compte ne correspond a cette adresse');
      }
   }
?>
<?php require 'inc/header2.php'; ?>  
<h2 align="center"> Récupératuon de mot de passe ? </h2>
<div align="center">
 <p align="center">Indiquez votre email ci-dessous puis validez.
Vous recevrez dans quelques instants, par email, un lien vous permettant de réinitialiser facilement votre mot de passe.</p>
 <form class="form-inline" method="POST" action="">
      <div class="form-group" >
          <label for="email" class="label-left">Votre adresse email</label>
          <input id="email" class="form-control" name="email" type="email"/>
    <button type="submit" class="btn btn-primary">Valider</button>
      </div>
 
<?php require 'inc/footer.php'; ?>
reset.php
<?php
   require 'inc/bootstrap.php';
if(isset($_GET['id_customer']) && isset($_GET['token'])){
   $auth = App::getAuth();
   $db = App::getDatabase();
   $user = $auth->checkResetToken($db, $_GET['id_customer'], $_GET['token']);
   if($user){
      if(!empty($_POST)){
         $validator = new Validator($_POST);
         $validator->isConfirmed('passwd');
         if($validator->isValid()){
            $passwd = $auth->hashPassword($_POST['passwd']);
            $db->query('UPDATE customer SET passwd = ?, reset_at = NULL, reset_token = NULL WHERE id_customer = ?', [$passwd , $_GET['id_customer']]);
            $session->setFlash('success', 'Votre mot de passe a bien été changé');
            $auth->connect($user);
            App::redirect('index.php');
         }
      }
      }else{
         Session::getInstance()->setFlash('danger', "Ce token n'est plus valide");
         App::redirect('login.php');
         }
      }else{
      App::redirect('login.php');
      }
?>
<?php require 'inc/header2.php'; ?>
<h1>Réinitialiser mon mot de passe</h1>
 <form  method="POST" action="" autocomplete="on">
      <div class="form-group">
          <label for="passwd" >Mot de passe</label>
           <input id="passwd" name="passwd"  type="password" class="form-control"/>
      </div>
      <div class="form-group">
          <label for="passwd" >Confirmation du mot de passe</label>
           <input id="passwd" name="mdp_confirm"  type="password" class="form-control"/>
      </div>
    <button type="submit" name="" class="btn btn-primary">Changer mon mot de passe</button>
 
 
<?php require 'inc/footer.php'; ?>
et mes deux  functions de resetPassword et CheckResetToken
 public function  resetPassword($db, $email){
              $user = $db->query('SELECT * FROM customer WHERE (email = :email) AND confirmed_at IS NOT NULL ', ['email' => $email])->fetch(PDO::FETCH_OBJ);
            if($user){
                $reset_token = Str::random(60);
                $db->query('UPDATE customer SET reset_token = ?, reset_at = NOW() WHERE id_customer = ?', [$reset_token, $user->id_customer]); //pas besoin de faire un fetch c un update
                mail($_POST['email'], 'Réinitialiser votre mot de passe', "Afin de valider votre compte merci de cliquer sur ce lien\n\nhttp://localhost/TOUPACKGROUP/reset.php?id_customer={$user->id_customer}&token=$reset_token");
                return $user;
            }
            return false;
        }
        public function checkResetToken($db, $user_id, $token){
           return $db->query('SELECT * FROM customer WHERE id_customer = ? AND reset_token IS NOT NULL AND reset_token = ? AND reset_at > DATE_SUB(NOW(), INTERVAL 30 MINUTE)', [$user_id, $token])->fetch(PDO::FETCH_OBJ);
        }
Je serai vraiment très reconnaissante pour votre aide >< ! Le jour J approche et je commence vraiment à stresser :'s 
Publicité

Aendawan

Messages: 67

tes données de ta query j'y aurais mi un fetch_array(), et ensuite dans le if j'aurai fait count($user) == 1 pour vérifier qu'il existe car le soucis viens du fais que resetPassword($db, $email) retourne tout le temps false donc $user == false.


Veuillez vous connecter ou créer un compte pour poster une réponse