3

ソルトを使用してパスワードをデコードしている場合、ログインは常に「不正な資格情報」を返します。

Fixture を使用してテストデータを作成しています。

public function load(ObjectManager $manager)
{
    $encodeFactory = $this->container->get('security.encoder_factory');

    $user = new User();
    $user->setUsername('admin');
    $user->setEmail('webmaster@aranox.de');

    $encoder = $encodeFactory->getEncoder($user);
    $user->setPassword($encoder->encodePassword('admin', $user->getSalt()));

    $user->setIsEnabled(true);

    $manager->persist($user);
    $manager->flush();

    $this->addReference('user-admin', $user);
}

security.yml でエンコーディングを設定します。

security:
    encoders:
        Aranox\UserBundle\Entity\User:
            algorithm: sha512

次を使用してユーザーエンティティにソルトを作成します。

...
/**
 * @ORM\Column(type="string", length=255)
 */
private $password;
/**
 * @ORM\Column(type="string", length=255)
 */
private $salt;

...
function __construct()
{
    $this->groups               = new ArrayCollection();
    $this->salt                 = md5(uniqid(null, true)); 
...

ソルトを作成しない場合 ($this->salt = "")、すべて正常に動作します。

これはどのように起こりますか?

4

1 に答える 1

5

sha512には長い文字列が含まれているため、エンティティファイルのパスワードフィールドの長さを確認し、それより短い場合は255に増やしてください。

于 2012-10-31T11:12:05.530 に答える