2016-06-25 4 views
-1

私は最初のログインシステムを構築しようとしています。私は初心者です。ログインphpのハッシュパスワードを取得する方法

私はデータベースからパスワードを取得し、このコードを使用してログインを確認したいと考えています。

if (password_verify($password, $hash)) { 
    echo 'Password is valid!'; 
} 

データベース内のパスワードは、私は私が私のSQLに$ハッシュを接続するのですかSQL

SELECT password FROM $tbl_name WHERE email='$email' 

を使用する必要があります知っている

$hash = password_hash($_POST['password'], PASSWORD_DEFAULT)."\n"; 

を使用してハッシュされましたか?

最初のパラメータは、ユーザーの入力から、非ハッシュされたパスワードです:どのようにpassword_verify作品を説明するのは基本的にオーケー

+0

あなたのMySQLのテーブルにハッシュを格納する方法を求めている、またはあなたのMySQLのテーブルにハッシュに対して与えられたハッシュをチェックする方法を知りたいのですか? –

+0

私はデータベースからハッシュされたパスワードをどのように取得し、変数$ passwordで 'fill'するのか知りたいです。 –

答えて

0

。 2番目のパラメータは、データベースから抽出したハッシュされたパスワードです。

以下は、データベース抽出に使用する構造です。これはOOPであり、コーディングのより良い方法であるため、 "手続き型"スタイルのPHPを学ぶ前に試して学ぶべき正しいコーディング規約を使用します。

class DatabaseConnect{ 

    protected 
     $host, $user, $pass, $dbname, $con; 

    public function __construct(){ 

     // Replace these with your database information. dbname is the name of the actual database, not the table. 

     $this->host = "localhost"; 
     $this->user = "root"; 
     $this->pass = ""; 
     $this->dbname = "test"; 
    } 

    public function dbConnect(){ 
     try{ 
      $this->con = new PDO("mysql:host=$this->host;dbname=$this->dbname", $this->user, $this->pass); 
      $this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     }catch(Exception $ex){ 
      echo $ex->getMessage(); 
     } 
    } 

    public function dbDisconnect(){ 
     $this->con = null; 
    } 
} 

class Database extends DatabaseConnect{ 

    public function __construct(){ 
     parent::__construct(); 
    } 

    public function getPassword($username){ 

     $sql = "SELECT password FROM users WHERE username = ?;"; 

     $this->dbConnect(); 

     $stmt = $this->con->prepare($sql); 
     $stmt->bindParam(1, $username); // This is the username that was passed to the method 
     $stmt->execute(); 
     $stmt->setFetchMode(PDO::FETCH_ASSOC); 

     $results = $stmt->fetchAll(); 

     $this->dbDisconnect(); 

     return $results[0]["password"]; 
    } 
} 

// This is the code that uses the above classes. The classes can be kept in a separate file (and should be). 
$database = new Database(); 
$passFromDatabase = $database->getPassword("pseud"); 
$passFromInput = $_POST["password"]; 

if(password_verify($passFromInput, $passFromDatabase)){ 
    echo "Passwords match"; 
} 

最初のクラスには、データベースに接続するための情報とメソッドが含まれています。 2番目のクラスは、指定されたユーザー名でデータベースからパスワードを取得する方法を持ち、最初のクラスを拡張します。

次に、クラスの下で、データベースからデータを取得するためにこれらのクラスを使用しています。

通常、StackOverflowでは、人々はこの種のことを拒否します(あなただけが研究することができる完全な答えを与えます)が、私はむしろ実際に助けます:P。次回はほとんどの人があなたを援助することを拒否することに注意してください。

希望しました。

+0

申し訳ありませんが、私の投稿は漠然としているに違いありません。私はどのように私はデータベースからパスワードを取得し、変数$パスワードでそれを埋めることを知りたい –

+0

1つの瞬間は、完全な答えを提供します –

+0

そこに、あなたを助けることを望む。 –

0

の下のリンクからハッシュ 接続するデータベースのチュートリアルを一致させるようにしてください。

あなたがする必要があるのは、電子メールでレコードのデータベースにクエリを取得し、次にpassword_verify()を使用して、データベースから返されたパスワードハッシュと入力パスワードを比較することです。

ユーザーを確認する簡単な手順に従います。
1.データベースクエリを実行して、電子メールでユーザーにハッシュされたパスワードを取得させます。
password_verify()を使用して、このハッシュされたパスワードを確認します。我々は、MySQLに直接password_verify()を使用することはできません


理由は、照会(つまりpassword_hashです)ユニーク/異なるパスワードをpassword_hash()関数を実行するたびに生成されます。

http://php.net/manual/en/function.password-hash.php

関連する問題