<?php
require "db.php";
$data = $_POST;
if( isset($data['do_login']) )
{
$errors = array();
$user = R::findOne('users', 'login = ?', array($data['login']));
if($user)
{
if( password_verify( $data['password'], $user->password )) {
//$SESSION['logged_user'] = $user;
echo '<div style="color: green;">Ну все</div><hr>';
} else
{
$errors[] = 'pass no?';
}
} else
{
$errors[] = 'no akk';
}
}
if( ! empty($errors) )
{
echo '<div style="color: red;">'.array_shift($errors).'</div><hr>';
}
?>
<form action="/login.php" method="POST">
<p>
<p><strong>Login</strong>:</p>
<input type="text" name="login" value="<?php echo $data['login']; ?>">
</p>
<p>
<p><strong>pass</strong>:</p>
<input type="password" name="password">
</p>
<p>
<button type="submit" name="do_login">login</button>
</p>
</form>
пишу логин где нет с БД. пишет no akk (логин нет на БД) пишу логин и не правильно пароль где на БД. пишет pass no (пароль не правильно) пишу логин и правильно пароль. опять пишет pass no (пароль не правильно)
object(RedBeanPHP\OODBBean)#15 (10) { ["properties":protected]=> array(5) { ["id"]=> string(2) "20" ["login"]=> string(5) "root1" ["password"]=> string(30) "$2y$10$6F****************" ["pin"]=> string(4) "1234" ["email"]=> string(3) "123" } ["__info":protected]=> array(5) { ["type"]=> string(5) "users" ["sys.id"]=> string(2) "id" ["sys.orig"]=> array(5) { ["id"]=> string(2) "20" ["login"]=> string(5) "root1" ["password"]=> string(30) "$2y$10$6***************" ["email"]=> string(3) "123" } ["tainted"]=> bool(false) ["changed"]=> bool(false) } ["beanHelper":protected]=> object(RedBeanPHP\BeanHelper\SimpleFacadeBeanHelper)#11 (0) { } ["fetchType":protected]=> NULL ["withSql":protected]=> string(0) "" ["withParams":protected]=> array(0) { } ["aliasName":protected]=> NULL ["via":protected]=> NULL ["noLoad":protected]=> bool(false) ["all":protected]=> bool(false) }
это код
var_dump($user);
Исходя из этой информации
["password"]=> string(30) "$2y$10$6F****************"
предположу, что длина поля password
в таблице пользователей составляет 30 символов.
Этого недостаточно для хранения хеша получаемого от функции password_hash():
Use the bcrypt algorithm (default as of PHP 5.5.0). Note that this constant is designed to change over time as new and stronger algorithms are added to PHP. For that reason, the length of the result from using this identifier can change over time. Therefore, it is recommended to store the result in a database column that can expand beyond 60 characters (255 characters would be a good choice).
Следует увеличить длину поля для хранения хеша до 255 символов и перегенерировать пароли всех пользователей с помощью функции password_hash().
P.S. Если длина поля password
на данный момент >= 60 символам, вам следует найти в коде причину урезания хеша пароля до 30 символов.
Функция password_verify - сравнивает пароль и его хеш. В Вашем случае, думаю Вам нужно сравнивать именно совпадение паролей. Попробуйте заменить
password_verify( $data['password'], $user->password )
на
$data['password'] === $user->password
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть попап плагин обратной связи, форме в котором уже присвоен экшн (отправка полей формы на email)
Столкнулся с проблемойПростейший сайт с текстовыми статьями, бэк на Phalcon PHP Framework (не суть), фронт ни на чём, отдельные JS наподобие jQuery и иже...