Проверьте этот блог ... Кажется, это то, что вы ищете ...
How to change the way Symfony2 encodes passwords
Вам необходимо расширить MessageDigestPasswordEncoder класс, перезаписать свои методы и скопировать этот класс в безопасности папка в вашей связке (создать, если не существует) Отъезд следующий пример того, как продлить MessageDigestPasswordEncoder
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder as BaseMessageDigestPasswordEncoder;
class MessageDigestPasswordEncoder extends BaseMessageDigestPasswordEncoder
{
private $algorithm;
private $encodeHashAsBase64;
public function __construct($algorithm = 'sha512', $encodeHashAsBase64 = true, $iterations = 5000)
{
$this->algorithm = $algorithm;
$this->encodeHashAsBase64 = $encodeHashAsBase64;
$this->iterations = $iterations;
}
protected function mergePasswordAndSalt($password, $salt)
{
if (empty($salt)) {
return $password;
}
return $salt.$password; // or do whatever you need with the password and salt
}
public function encodePassword($raw, $salt)
{
// this is the original code from the extended class, change it as needed
if (!in_array($this->algorithm, hash_algos(), true)) {
throw new \LogicException(sprintf('The algorithm "%s" is not supported.', $this->algorithm));
}
$salted = $this->mergePasswordAndSalt($raw, $salt);
$digest = hash($this->algorithm, $salted, true);
// "stretch" hash
for ($i = 1; $i < $this->iterations; $i++) {
$digest = hash($this->algorithm, $digest.$salted, true);
}
return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest);
}
}
После того, как у вас есть класс готовы обновлять свой config.yml
# app/config/config.yml
# ...
parameters:
security.encoder.digest.class: Ens\TestBundle\Security\MessageDigestPasswordEncoder
Это не ясно из этого ответа, будет ли Symfony автоматически обрабатывать конкретную ситуацию в Аскере: переходе от одной кодировки пароля к другому, с существующими хранимыми паролями. Конфигурация Symfony позволяет достаточно легко изменить кодировщик, но то, что произойдет в следующий раз, когда пользователь войдет в систему, не описан. В идеале выбранная кодировка была бы сохранена в пользовательской записи, поэтому она могла бы декодировать старый способ до тех пор, пока он не будет обновлен, а затем закодировать новый способ сброса пароля (который может быть запущен в начале приложения). Это делает это? – frumious
Ответчик спросил, откуда это должно быть сделано в Symfony «Будет ли это сделано в контроллере входа в систему? Или есть способ сделать это в объекте EncoderInterface?» и не так, он знает, как он описал общий способ сделать это. Ответ от описания был и как сделать ре-хэш только в Symfony. – iPeleg
Из того, что я могу сказать, есть EncoderAwareInterface, поэтому можно использовать кодировщик на основе данного объекта User. Реальный вопрос заключается в том, где подходящим местом для размещения логики обновления является, то есть перестановка пароля в новый формат. – parent5446