首页 > 解决方案 > 为什么函数'password_verify' PHP 不起作用?

问题描述

我有一个 ws 我用用户名和密码创建一个用户并使用

password_hash($password, PASSWORD_DEFAULT); 

对密码进行哈希处理。

ws 创建用户:

<?php
    header('Content-Type: text/xml');
    
        $username = $_REQUEST["username"] ?? "";
        $password = $_REQUEST["psw"] ?? "";

        $codice_risposta = 0;
        $messaggio = "";
        $sql = "";
        $hashedPassword = password_hash($password, PASSWORD_DEFAULT); 
        
        $conn = mysqli_connect("localhost:2020","root","","pasinisilvia_elaboratogasitalia");
        //password_verify($userPassword, $hashedPassword)
        
        if ($username != '' && $hashedPassword!='' ){
            if ($conn) {  // connessione OK
                
                $sql = "INSERT INTO proprietario (NomeUtente,Password) 
                        VALUES ( '$username','$hashedPassword' ) ";

                $result = mysqli_query($conn,$sql);
                
                if ($result) {  // query OK
                    $codice_risposta = 1;
                    $messaggio = "Utente creato";
                } 
                else {
                    $messaggio = "Username già in uso";
                }
            }
        }else {
            $messaggio = "Parametri mancanti";
        }           
    
        $doc=new DOMDocument('1.0', 'UTF-8');       
    
        $elRisposta=$doc->createElement("risposta");                                                //echo "<risposta>\n";
        $elCodRisp =$doc->createElement("codice_risposta");                                         //echo "    <codice_risposta>$codRisp</codice_risposta>\n";
        $elCodRisp->appendChild($doc->createTextNode("$codice_risposta"));
        $elMex=$doc->createElement("messaggio");                                                    //echo "    <messaggio>$msg</messaggio>\n";
        $elMex->appendChild($doc->createTextNode("$messaggio"));
            
        // appendo a risposta
        $elRisposta->appendChild($elCodRisp);
        $elRisposta->appendChild($elMex);
        
        $doc->appendChild($elRisposta);
        echo $doc->saveXML();
?>

登录:

<?php   header('Content-Type: text/xml');
        
        $username = $_REQUEST["username"] ?? "";
        $psw = trim($_REQUEST["psw"]) ?? "";
        //var_dump($psw);
        //$hashedPassword = password_hash($psw, PASSWORD_DEFAULT);
        $conn = mysqli_connect("localhost:2020","root","","pasinisilvia_elaboratogasitalia");
        
        if (  $username!='' &&  $psw!='' ) {
            if ($conn) {   // se la connessione è avvenuta correttamente
              $sql = "SELECT Password FROM proprietario WHERE NomeUtente='$username'";
                
              $result = mysqli_query($conn,$sql);
              if ( $result ) {  // se non ci stati errori di sintassi
                if ( mysqli_num_rows($result) == 1 ) {  //se c'è l'utente
                  $row = mysqli_fetch_assoc($result);
                  $hashedPassword = $row['Password'];
                    //var_dump($psw);
                 //  var_dump($hashedPassword);
                // $hashedPassword = password_hash($psw, PASSWORD_DEFAULT); 
                 if(password_verify($psw, $hashedPassword)){
                  //if($hashedPassword == $pwDb){
                      $cod_risp = 1;
                      $messaggio = "Successo";
                  }
                  else{
                      $cod_risp = 0;
                      $messaggio = "pw sbagliata";
                  }
                }
            }
        
             /* $sql = "SELECT * FROM proprietario WHERE NomeUtente=? and Password=? " ;
                
              $stmt = $conn->prepare($sql);
              $stmt->bind_param('ss', $username, $hashedPassword); // 's' specifies the variable type => 'string'

              $stmt->execute();
              
              $stmt->bind_result($username, $password);
              $stmt->store_result();

              $result = $stmt->get_result();*/
             // $result = mysqli_query($conn,$sql);
             // $result = mysqli_query($conn,$sql);
              
             /* if ( $result ) {  // se non ci stati errori di sintassi
                if ( mysqli_num_rows($result) == 1 ) {  //se c'è l'utente
                 // $row = mysqli_fetch_assoc($result);
                  $nome = $row['NomeUtente'];
                  $pw = $row['Password'];
                  
                  $cod_risp = 1;
                  $messaggio = "Successo";
                }
                else {  //se non c'è l'utente
                  $cod_risp = 0;
                  $messaggio="Username o password errati";
                }
              }
              else {
                $cod_risp = 0;
                $messaggio="Errore nella query";    
              }
            }
            else  {
               $cod_risp = 0;
               $messaggio="Impossibile connettersi al database"; 
            }*/
        }
        else {
          $cod_risp = 0;
          $messaggio = "Parametri mancanti nella richiesta";
        }
        }
        
        /*if($cod_risp == 1)
            echo "1";
        else
            echo "0";*/
        
        /*echo "<risposta>\n";
        echo "    <codice_risposta>$cod_risp</codice_risposta>\n";
        echo "    <messaggio>$messaggio</messaggio>\n";
        if ($cod_risp==1) {
            echo "    <dettagli>\n";
            echo "        <nome>$nome</nome>\n";
            echo "        <cognome>$pw</cognome>\n";
            echo "    </dettagli>";
        }
        echo "</risposta>";  */ 
        
        /*echo "<risposta>\n";
        echo "    <codice_risposta>$cod_risp</codice_risposta>";
        echo "    <messaggio>$messaggio</messaggio>";
        echo "</risposta>"; */
        
        $doc=new DOMDocument('1.0', 'UTF-8');
        
        $elRisposta=$doc->createElement("risposta");                                                //echo "<risposta>\n";
        $elCodRisp =$doc->createElement("codice_risposta");                                         //echo "    <codice_risposta>$codRisp</codice_risposta>\n";
        $elCodRisp->appendChild($doc->createTextNode("$cod_risp"));
        $elMex=$doc->createElement("messaggio");                                                    //echo "    <messaggio>$msg</messaggio>\n";
        $elMex->appendChild($doc->createTextNode("$messaggio"));
            
        // appendo a risposta
        $elRisposta->appendChild($elCodRisp);
        $elRisposta->appendChild($elMex);
        
        $doc->appendChild($elRisposta);
        echo $doc->saveXML();
?>

每次我尝试登录时,函数 password_verify 都会返回 false。感谢关注。

标签: phpformsauthenticationhashws

解决方案


推荐阅读