From 0b81261ae725aa39fffe25eefcac9dbb9e3cb11d Mon Sep 17 00:00:00 2001 From: vbochet <vbochet@gmail.com> Date: Mon, 25 Apr 2016 20:51:08 +0200 Subject: [PATCH] =?UTF-8?q?Modification=20du=20mod=C3=A8le=20et=20du=20con?= =?UTF-8?q?tr=C3=B4leur=20pour=20la=20connexion.=20Prise=20en=20compte=20d?= =?UTF-8?q?e=20la=20v=C3=A9rification=20du=20password=20hash=C3=A9.=20Migr?= =?UTF-8?q?ation=20des=20comparaisons=20du=20mod=C3=A8le=20vers=20le=20con?= =?UTF-8?q?tr=C3=B4leur.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controller/ConnexionController.php | 24 ++++++++++++++++-------- app/model/Connexion.php | 19 ++++++------------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/app/controller/ConnexionController.php b/app/controller/ConnexionController.php index cbeda4e..8de5846 100644 --- a/app/controller/ConnexionController.php +++ b/app/controller/ConnexionController.php @@ -10,7 +10,7 @@ class ConnexionController extends Controller { // classe de contrôleur pour la } public function verify() { // vérifie que les identifiants sont valides par rapport à la BDD - // méthode basique avec un stockage de mdp en clair, ce qu'on ne fera bien sûr pas ! + // méthode avec un stockage de mdp hashé selon la fonction password_hash() if(!isset($_POST['login']) || !isset($_POST['password'])) { // si l'une des données manque, erreur //appeler une fonction d'erreur echo "<h1>Erreur : variables absentes</h1>"; @@ -18,17 +18,25 @@ class ConnexionController extends Controller { // classe de contrôleur pour la } $pseudo = $_POST['login']; - $password = $_POST['password']; + $userpassword = $_POST['password']; //le mot de passe utilisateur + $bddpassword = Connexion::getPassword($pseudo); // le hash du mot de passe stocké en BDD - $result = Connexion::check($pseudo, $password); // vérifie si existe en base et a bon mdp - if($result == 1) { // connexion valide - header('Location:valid'); // on redirige vers la page OK - } - else { + if($bddpassword == null) { // l'utilisateur n'existe pas => code d'erreur 0 session_start(); // on démarre une session pour avoir accès aux variables superglobales de session - $_SESSION["connexionErrCode"] = $result; // on stocke le code d'erreur + $_SESSION["connexionErrCode"] = 0; // on stocke le code d'erreur header('Location:../connexion'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne, ne me demandez pas pourquoi !) } + else { // l'utilisateur existe + if(password_verify($userpassword, $bddpassword)) { // la connexion a réussi + header('Location:valid'); // on redirige vers la page OK + } + else { // sinon, c'est que le mot de passe est faux + session_start(); // on démarre une session pour avoir accès aux variables superglobales de session + $_SESSION["connexionErrCode"] = 2; // on stocke le code d'erreur + header('Location:../connexion'); // on redirige vers la page de formulaire (il faut faire un retour dans le dossier parent pour que ça fonctionne, ne me demandez pas pourquoi !) + } + } + } } diff --git a/app/model/Connexion.php b/app/model/Connexion.php index cb6b129..b84adcf 100644 --- a/app/model/Connexion.php +++ b/app/model/Connexion.php @@ -2,25 +2,18 @@ class Connexion extends Model { // classe de modèle pour la connexion au site - public static function check($pseudo, $pass) { // méthode permettant de vérifier la validité d'identifiants d'un membre dans la BDD - // renvoie 1 si le membre existe et que son mot de passe correspond - // renvoie 2 si le mot de passe est faux - // renvoie 0 si le membre n'existe pas + public static function getPassword($pseudo) { // méthode permettant de récupérer le password hashé d'un membre dans la BDD + // renvoie le mot de passe si le membre existe + // renvoie null si le membre n'existe pas $db = Database::getInstance(); // on récupère la connexion à la BDD - $sql = "SELECT password FROM profils WHERE pseudo = :pseudo"; + $sql = "SELECT password FROM R_joueur WHERE pseudo = :pseudo"; $req = $db->prepare($sql); // on prépare la requête - //$req->setFetchMode(PDO::FETCH_CLASS, "Profil"); // règle le type dans lequel on doit mettre les données (PDO va chercher les attributs de la classe de même nom que ses colonnes de BDD et mettre dedans les valeurs correspondantes) $req->execute(array(":pseudo" => $pseudo)); // on remplace les variables dans la requête - $return = 0; //valeur par défaut + $return = null; //valeur par défaut du retour if($result = $req->fetch()) { // on récupère l'enregistrement, s'il existe - if($result['password'] == $pass) { // si les mdp correspondent, alors c'est bon - $return = 1; - } - else { // sinon, il y a ppb dans les mdp - $return = 2; - } + $return = $result['password']; // on récupère le mdp hashé pour le retourner } return $return; -- GitLab