Я взял старый проект и снова начал разрабатывать его с помощью Laravel, но я борюсь с пользователями, уже зарегистрированными в базе данных.
Я считаю, что они зашифровали пароли с помощью
password_hash(' ', PASSWORD_DEFAULT) method
но я думаю, что Laravel использует
Bcrypt()
Поэтому я не могу войти в систему, используя эти учетные данные. Есть ли способ изменить шифрование?
Я не хочу просить пользователей сменить пароль или что-то еще
Кстати, он хеширован, а не зашифрован. Всего два разных зверя ;-)
Поможет ли это изменить старые хешированные пароли на bcrypt? Я не думал, что это сработает. Только для создания новых.
Вы можете создавать только новые, хеш невозможно взломать. Чтобы преобразовать в новые, нужно немного поработать.
В том-то и дело. Я хотел бы преобразовать старые хешированные пароли в пароли bcrypt, не прося пользователя изменить его самостоятельно.
Чтение метода очень хорошее руководство показываетPASSWORD_BCRYPT
:
password_hash("thepassword", PASSWORD_BCRYPT);
Если у них есть существующий пароль, вы можете использовать password_verify()
для подтверждения пароля, независимо от того, как он был хеширован.
Вы можете преобразовать пользователя в новые хэши паролей, но только когда они войдут в систему. Вам нужно будет добавить еще один столбец для хранения нового пароля, а затем, когда они войдут в систему, проверьте существующий пароль (проверьте, если возможно) и пустой в новом столбце. Если новый столбец не пуст, сравните с столбцом password_verify()
. Если он пуст, хешируйте новый пароль указанным способом.
В конечном итоге каждый будет изменять свой метод хеширования при входе в систему, но с вашей стороны потребуется определенная работа, чтобы привести код в нужную форму, чтобы выполнить преобразование безопасно и надежно.
В этом случае я бы использовал его при входе в систему и сравнивал пароль, который вводит пользователь, с хешированным паролем в базе данных. Верно?
Верно. Если вы хотите изменить метод и преобразовать старые пароли, дорога намного длиннее.
Я отредактировал, чтобы отразить метод создания новых хэшей.
Laravel использует хэши bcrypt, те же хэши, которые использует password_hash с алгоритмами PASSWORD_BCRYPT или PASSWORD_DEFAULT.
Следовательно, хеши уже совместимы с Laravel. Это довольно легко проверить с помощью tinker:
> $hash = password_hash('test', PASSWORD_DEFAULT);
"$2y$10$OpnZSN0EbAzMCvywTAWyWOqOme6/3N/xe.nrpcUO6mhLumMxL6DYm"
> Hash::check('test', $hash);
true
Laravel также позволяет вам легко подключить вашу собственную реализацию интерфейса Hasher путем привязки к контейнеру ioc.
Вы ведь прочитали php.net/manual/en/function.password-hash.php, верно?