IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

comment utiliser password_verify


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    en étude de webmaster
    Inscrit en
    Février 2016
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : en étude de webmaster

    Informations forums :
    Inscription : Février 2016
    Messages : 125
    Points : 56
    Points
    56
    Par défaut comment utiliser password_verify
    Bonjour.
    J'ai une table dans ma base de donnée qui contient les logins et les mots de passes.
    J'ai très bien réussi a faire le password_hash.
    par contre je ne comprend pas comment on utilise password_verify, j'ai été voir la doc sur php.net et pour moi c'est pas clair. Car eux ils utilisent le mot de passe en dure pour le vérifier, mais moi je ne sais pas combien de mot de passe il va créer et ce que ça sera. Donc je récupère le mot de passe de la base de donnée, mais je le vérifie par rapport a quoi.

    pour l'insertion du mot de passe et son hashage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    if(empty($message_erreur)){
     
            //on met dans une variable chaque valeur du formulaire
            $login = trim($_POST["login"]);
            $pass = trim($_POST["pass"]);
     
            $pass_hash = password_hash($pass, PASSWORD_DEFAULT);
     
            // insert et utiliser mysqli_real_escape_string
            //j'ai pas mis le mysqli_real_escape_string car il fait planté le code
            $sql_insert = "INSERT INTO user (id_user, login, pass) VALUES (NULL, '".$login."', '".$pass/*_hash*/."')";
     
            //je fait une condition qui verifie si la connexion c'est bien passe
            if(mysqli_errno($connexion) != 0){
                die ('ERREUR '.mysqli_error($connexion));
            }
     
            //j'execute la requete
            $resultat_insert = mysqli_query($connexion, $sql_insert);
     
            // le formulaire ne sera pas réaffiché
            $affiche_formulaire = TRUE;
     
        }
        // sinon
        else {
     
            // on fabrique un message d'erreur
            $message = implode(", ", $message_erreur);
     
            // on reaffiche le formulaire
            $affiche_formulaire = true;
     
        }
    ça c'est pour la vérification du mot passe et la transmission du login
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    // le minimum de vérification sur les informations reçues par le formulaire
        if(isset($_POST["login"]) && isset($_POST["pass"])){
     
            // La connexion a échouée
            if(!$connexion){
     
                //On récupère le beau message d'erreur de connexion généré par mysql (mysqli_connect_error)
                $msgError = sprintf(" ERREUR : %s", mysqli_connect_error());
     
                exit($msgError);
     
            }
     
            // pas d'errueurs, nous sommes connecté!
            $login = mysqli_real_escape_string($connexion, $_POST["login"]);
            $pass  = mysqli_real_escape_string($connexion, $_POST["pass"]);
     
            $sql = "SELECT pass FROM user WHERE login = '".$login."' AND pass = '".$pass."'";
     
            // On execute la requête
            $resultat = mysqli_query($connexion, $sql);
     
            //Tout est bon, on peut afficher le résultat de la requête
            if(mysqli_num_rows($resultat) === 1){
     
                if(password_verify($pass, $ligne["pass"])){
     
                    // démarrer la session
                    session_start();
     
                    // initialiser une variable de session user
                    $_SESSION['user'] = $login;
     
                    // redirection sur plat_liste.php
                    header('Location:base_de_donnee/plat/plat_liste.php');
     
                }
            }else{
     
                // sinon : message = pas ok
                $message = "Login ou mot de passe eronné";
     
            }
     
        }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    mais je le vérifie par rapport a quoi
    La comparaison est entre ce que est dans la base de données et ce que l'utilisateur a saisi.
    La requête ne doit pas avoir le mot de passe dans le WHERE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    en étude de webmaster
    Inscrit en
    Février 2016
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : en étude de webmaster

    Informations forums :
    Inscription : Février 2016
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    Merci pour ta réponse, d'accord la comparaison est entre ce qui est entré comme mot de passe et le mot de passe de la base de donnée.
    Je vais peux être. être chiant, mais concrètement tu pourras pas me donné une aide sur comment je vais faire.
    Parce que je suis assez perdu, autant la gestion de la base de donnée je comprend. Autant cette histoire de mot de passe vérifié, là je suis perdu.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           $sql_insert = "INSERT INTO user (id_user, login, pass) VALUES (NULL, '".$login."', '".$pass/*_hash*/."')";
    Il faudrait savoir... Tu enregistres :
    • $pass (le mot de passe EN CLAIR)
    • ou $pass_hash (le mot de passe HASHE) ??



    Méthode
    1- on récupère depuis le formulaire de connexion :
    • $_POST["login"]
    • $_POST["pass"] (= le mot de passe EN CLAIR)

    2- on fait une requête sur le LOGIN uniquement ( là est toute l'astuce ! )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT pass FROM user WHERE login = '".$login."'";
    C'est aussi pour ça que les LOGIN doivent être obligatoirement UNIQUES* !
    (* : sinon, il faudrait aussi gérer le fait d'obtenir plusieurs réponses possibles... mais ça rend impossible la récupération d'un mot de passe en cas de perte : on ne saurait plus à qui l'attribuer ! Donc : UNIQUE !)

    3- SI on a UN (et un seul*) résultat (= ce LOGIN existe en BdD) : on récupère le MDP HASHE enregistré en BdD pour CE LOGIN -> $ligne["pass"] (= le mot de passe HASHE)

    4- on compare avec le MDP POSTE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( password_verify ( $_POST["pass"] , $ligne["pass"] ) )
    OK ? c'est BON.


    N.B. renseigne-toi aussi sur les requêtes préparées mysqli.

  5. #5
    Membre du Club
    Homme Profil pro
    en étude de webmaster
    Inscrit en
    Février 2016
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : en étude de webmaster

    Informations forums :
    Inscription : Février 2016
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. Comment utiliser un cache ?
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 14/03/2003, 09h55
  3. comment utiliser actionscript ?
    Par webs dans le forum Flash
    Réponses: 3
    Dernier message: 09/02/2003, 23h11
  4. Comment utiliser OUT ?
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 3
    Dernier message: 20/07/2002, 09h35
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo