2016-06-25 3 views
-1

Я пытаюсь создать свою первую систему входа, я новичок.как получить хешированный пароль для входа php

Я хочу получить пароль из своей базы данных и использовать этот код для проверки имени пользователя.

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

пароль в базе данных хешируется с помощью

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

я знаю, что я должен использовать SQL

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

как я подключить $ хэш к моему SQL?

+0

Вы спрашиваете, как хранить хэш в вашей тузда таблицу, или вы хотите знать, как проверить данный хэш от хэша в вашей тузда таблице? –

+0

Я хочу знать, как я получаю хешированный пароль из базы данных и «заполняю» его в переменной $ password –

ответ

0

Хорошо так в основном, чтобы объяснить, как password_verify работы:

Первый параметр не является хэшированным паролем, от ввода пользователя. Второй параметр - это хешированный пароль, который вы извлекаете из базы данных.

Ниже приведена структура, которую я использую для извлечения базы данных. Это 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"; 
} 

Первый класс содержит информацию/методы для подключения к базе данных. Второй класс имеет наш метод для получения пароля из базы данных с заданным именем пользователя и расширяет первый класс.

Затем, под классами, мы используем их для получения данных из базы данных.

Как правило, на StackOverflow люди отказываются делать такие вещи (давая вам полный ответ, который вы вполне можете просто исследовать), но я бы скорее помог: P. Просто знайте, в следующий раз, что большинство людей откажется вам помочь.

Надеюсь, я помог.

+0

извините, мой пост, должно быть, был неопределенным. Я хочу знать, как я получаю пароль из базы данных и заполняю его в переменной $ password –

+0

. Через мгновение вы получите полный ответ. –

+0

Там вы идете, надеюсь, что это поможет вам. –

0

вы, вероятно, следует подключить DB первый, а затем попытаться соответствовать хэш подключения обучающую базы данных из ссылки ниже

PHP Select Data From MySQL

login with php Hashing passwords

+0

Пожалуйста, добавьте тело кода, так как ссылки будут устаревать с течением времени. – AlBlue

0

Вы не можете напрямую использовать password_verify в запросе MySQL.

Что вам нужно сделать, так это получить запрос к базе данных для записи по электронной почте, а затем сравнить хэш-пароль, возвращаемый из базы данных с помощью пароля ввода, с помощью password_verify().

Следуйте простым шагам, чтобы проверить пользователя.
1. Запустите запрос базы данных, чтобы получить по электронной почте пароль, чтобы получить хешированный пароль.
2. Проверьте этот хешированный пароль, используя password_verify().


Причина мы не можем использовать password_verify() непосредственно в запросах MySQL является то, что password_hash() генерирует уникальный/другой пароль каждый раз, когда вы выполняете password_hash() функцию.

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

Смежные вопросы