Я пытаюсь использовать класс bcrypt, но не работает, когда я хочу использовать код проверки. Он всегда хэширует новый пароль, поэтому я не могу войти.
<?php
$password = Bcrypt::hashPassword($_POST['mdp_user']);
$pwdVerify = Bcrypt::checkPassword($_POST['mdp_user'], $password);
$sql = 'SELECT * FROM tgn_users WHERE login="' . $_POST[ 'login' ] . '" AND mdp_user="' . $password . '"';
echo $sql;
$req = mysqli_query( $connexion, $sql )or die( mysqli_error( $connexion ) );
if ( mysqli_num_rows( $req ) > 0 ) {
$nom_user = $_SESSION['nom_user'];
$prenom_user = $_SESSION['prenom_user'];
$_SESSION[ 'islog' ] = "connect";
//header( 'Location: ../../profile.php' );
} else {
$_SESSION[ 'login' ] = $_POST[ 'login' ];
$_SESSION[ 'mdp_user' ] = $_POST[ 'mdp_user' ];
$_SESSION[ 'message' ] = "Erreur de log et/ou de pwd";
//header( "Location: " . $_SERVER[ 'HTTP_REFERER' ] );
}
?>
Это официальный документ. Я новичок в bcrypt, я действительно не понимаю, как найти решение. Пожалуйста помоги !
<?php
require_once 'Bcrypt.php';
// hash the password => returns hashed password
Bcrypt::hashPassword($password);
// check $password against the $hashedPassword => returns true/false
Bcrypt::checkPassword($password, $hashedPassword);
?>
Просто используйте password_hash
а также password_verify
для паролей. Он поддерживает множество алгоритмов хеширования, даже Bcrypt, и его гораздо проще понять.
Вы можете выбрать алгоритм и раунды (и некоторые другие, но не используйте его, если не знаете, что делаете) для password_hash
а также password_verify
обнаруживает используемый алгоритм
Спасибо @Magnus Eriksson, я сделал это, и это работает.
<?php
function logUser() {
require( './connexion.php' );
$sql_user = 'SELECT * FROM tgn_users WHERE login="' . $_POST[ 'login' ] . '"';
$req = mysqli_query( $connexion, $sql_user )or die( mysqli_error( $connexion ) );
if ( mysqli_num_rows( $req ) > 0 ) {
$row = mysqli_fetch_assoc( $req );
if ( Bcrypt::checkPassword( $_POST[ 'mdp_user' ], $row[ 'mdp_user' ] ) ) {
if($row['login']='admin'){
header( 'Location: ../../admin/' );
}else{
$_SESSION[ 'nom_user' ] = $row[ 'nom_user' ];
$_SESSION[ 'prenom_user' ] = $row[ 'prenom_user' ];
$_SESSION[ 'id_user' ] = $row[ 'id_user' ];
//$lifetime = 60*60*24*30;
//setcookie(session_name($_SESSION['nom_user']), session_id($_SESSION['id_user']),time()+$lifetime,'/');
header( 'Location: ../../profile.php' );
}
}else {
$_SESSION[ 'message' ] = "Erreur de log et/ou de pwd";
header( "Location: " . $_SERVER[ 'HTTP_REFERER' ] );
}
}
}?>
Но у меня проблема в моем состоянии. Какой бы логин ни был введен, я перенаправлен на страницу администратора :(. Я что-то упустил в своем условии if?