problème de récupération de mot de passe
- Accueil
- Forum
- Programmation
- PHP
- problème de récupération de mot de passe
JxSDev Le 26 avril 2016 à 12:06 (Édité le 25 janvier 2019 à 17:50)
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 😕 ... 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 Aendawan Le 26 avril 2016 à 17:30 (Édité le 1 janvier 1970 à 01:00)