После обновления до php7, BCryptPasswordEncoder выдает следующую ошибку, например. о регистрации при использовании FOSUserBundle стандартной страницы регистрации:FOSUserBundle BCryptPasswordEncoder salting
«Использование опции 'соли' в password_hash является устаревшим в C: \ XAMPP \ HTDOCS \ ascentary \ поставщика \ Symfony \ Symfony \ SRC \ Symfony \ Component \ Безопасность \ Основные \ кодировщика \ BCryptPasswordEncoder.php линия 81 "в C:. \ XAMPP \ HTDOCS \ TestProject \ поставщика \ behat \ behat \ SRC \ behat \ Testwork \ Вызов \ Handler \ RuntimeCallHandler"
Я вы узнали об этой проблеме, и проблема заключается в классе FOS UserManager, который вызывает:
/**
* {@inheritDoc}
*/
public function updatePassword(UserInterface $user)
{
if (0 !== strlen($password = $user->getPlainPassword())) {
$encoder = $this->getEncoder($user);
$user->setPassword($encoder->encodePassword($password, $user->getSalt()));
$user->eraseCredentials();
}
}
Передача здесь $ user-> getSalt() выдает ошибку, потому что на php7 вам больше не разрешается передавать настраиваемый соль для функции bcrypt encoding/password_hash. Кроме того, я вижу проблему в базовой FOS объекта пользователя, потому что в его конструкторе, соль устанавливается как:
$this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
Вопросы:
(1) Как решить ошибку я отправил выше? Может быть, переопределить UserManager или есть решение, предоставленное fos?
(2) Как правильно защитить соль, которая автоматически генерируется?
(3) Требуются ли какие-либо другие обновления, такие как обновление ircmaxell lib?
[Bcrypt не алгоритм шифрования] (HTTPS : //paragonie.com/blog/2015/08/you-wouldnt-base64-a-password-cryptography-decoded) –
Спасибо, хорошая статья! – user3746259