Symfony 2.1 неверные учетные данные только при кодировании пароля

Вот мой код для добавления пользователя-администратора:

public function addAction(Request $request){
    $admin=new Admin();
    $form=$this->createForm(new AdminType(), $admin);
    if($request->getMethod()=='POST'){
        $form->bindRequest($request);
        if($form->isValid()){
            $factory = $this->get('security.encoder_factory');
            $encoder = $factory->getEncoder($admin);
            $password = $encoder->encodePassword($admin->getPassword(), $admin->getSalt());
            $admin->setPassword($password);

            $em=$this->getDoctrine()->getEntityManager();
            $em->persist($admin);
            $em->flush();
        }
    }
    return $this->render('PuzzleAdminBundle:Admin:add.html.twig', array(
        'form'=>$form->createView()
    ));
}

а вот мой security.yml:

security:
encoders:
    Puzzle\AdminBundle\Entity\Admin: sha512
    Symfony\Component\Security\Core\User\User: plaintext

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    chain_providers:
        chain:
            providers: [admin_db, in_memory]
    admin_db:
        entity: { class: Puzzle\AdminBundle\Entity\Admin, property: username }
    in_memory:
        memory:
            users:
                root: { password: 123456, roles: [ 'ROLE_SUPER_ADMIN' ] }

Все в порядке, когда я хочу войти в систему с правами root или когда я настраиваю кодировщик сущностей на открытый текст. Почему я всегда получаю неверные учетные данные, когда настраиваю кодировщик сущностей на sha512?


person michail_w    schedule 23.09.2012    source источник


Ответы (3)


Проверьте длину поля в вашей базе данных. Если вы были подписаны на «Книгу», то, скорее всего, в вашем поле будет указано значение varchar(50). SHA-512 с кодировкой Base64 выводит строку из 88 символов. Приспособьтесь к этому, и вы должны быть в порядке.

person Jgarib    schedule 01.10.2012
comment
Вы, сэр, джентльмен и ученый! Я следил за книгой и предположил, что сделал что-то не так с файлами YML... вздох. - person Gerrit Wessels; 13.12.2012
comment
МОЙ БОГ!!! Большое спасибо! Я потратил два часа на то, чтобы все изменить, и вы меня спасли! - person ValentinH; 03.09.2013

Я считаю, что определенное значение «пароль» должно быть значением после кодирования. Таким образом, значение, которое он будет искать при настройке для использования кодировщика sha512, будет хэшем sha512 «123456», а не простым текстовым паролем.

Посмотрите здесь: http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password . Абзац после первого примера в этом разделе посвящен именно этому.

person femtoRgon    schedule 25.09.2012

У меня была указана проблема, и в моем случае это была довольно глупая вещь, слишком маленькая длина поля в базе данных.

person MaxMendez    schedule 08.04.2013