Догадаться!
Создайте собственный кодировщик и используйте пакет FOSAdvancedEncoder, чтобы выбрать соответствующий кодировщик.
<сильный>1. Создайте кодировщик
<?php
namespace Acme\MyBundle\Security\Encoder;
use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;
class LegacyEncoder implements PasswordEncoderInterface {
public function encodePassword($raw, $salt)
{
// Your Custom encoder logic
return $something
}
public function isPasswordValid($encoded, $raw, $salt)
{
return $encoded === $this->encodePassword($raw, $salt);
}
}
<сильный>2. Зарегистрируйте кодировщик как службу
services:
acme.legacy_encoder:
class: Acme\MyBundle\Security\Encoder\LegacyEncoder
<сильный>3. Установите пакет FOSAdvancedEncoderBundle
Посмотрите здесь: https://github.com/friendsofsymfony/FOSAdvancedEncoderBundle/blob/master/Resources/doc/index.md
<сильный>4. Настройте кодировщики
In app/config.yml
:
fos_advanced_encoder:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
legacy_encoder:
id: acme.legacy_encoder
<сильный>5. Реализуйте интерфейс с поддержкой кодировщика в своем пользовательском классе
use FOS\AdvancedEncoderBundle\Security\Encoder\EncoderAwareInterface;
use FOS\UserBundle\Entity\User as BaseUser;
class User extends BaseUser implements EncoderAwareInterface {
...
public function getEncoderName() {
if($this->islegacy()) {
return "legacy_encoder";
}
return NULL;
}
}
Не забудьте добавить логическое поле для администрирования, если пользователь является устаревшим пользователем или нет.
Вот и все.
person
Thomas K
schedule
22.08.2012
fos_user
. Поскольку FOSUserBundle использует SHA1, пароли не должны быть проблемой. - person Florent   schedule 20.08.2012