Symfony 2.0.4 - неверные учетные данные при входе - PullRequest
2 голосов
/ 23 февраля 2012

У меня проблема с логином. Я использую правильный логин в таблице в базе данных. Вот мой контроллер .

Мой security.yml:

security:
  encoders:
    My\HelloBundle\Entity\User:
        algorithm: sha512 
        encode_as_base64: true 
        iterations: 10 

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

  providers:
    users_db:
        entity: { class: My\HelloBundle\Entity\User, property: email }

  firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    login:
        pattern:  ^/demo/secured/login$
        security: false

    secured_area:
        pattern:    ^/
        anonymous: ~
        form_login:
            check_path: /login_check
            login_path: /login
        logout:
            path:   /logout
            target: /
        #http_basic:
        #    realm: "Secured Demo Area"

  access_control:
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
    #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }

Моя сущность слишком длинна для вставки, поэтому я положил ее на pastebin

У меня проблема при входе в систему, но она прекрасно работает с регистрацией (пароли были засолены и нормально сохранены в базе данных).

Это сообщение об ошибке:

exception 'Symfony\Component\Security\Core\Exception\BadCredentialsException' with message 'Bad credentials' in C:\xampp\htdocs\mgr\4_symfony\vendor\symfony\src\Symfony\Component\Security\Core\Authentication\Provider\UserAuthenticationProvider.php:83 Stack trace: #0

Пожалуйста, помогите мне. Привет.

1 Ответ

0 голосов
/ 01 августа 2012

Я замечаю пару проблем:

Вы не используете кодировщик, предоставленный Symfony, в основном конфигурация вашего кодера в security.yml игнорируется, вы можете изменить код (HelloController, начиная со строки 70), чтобы кодировать ваш пароль:

$factory = $this->get('security.encoder_factory');

$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword($user->getPassword(),
                            $user->getSalt());
$user->setPassword($password);

Я использовал эту заглушку из документации Symfony Security и работал на меня.

Я не думаю, что пользователь сохраняется в какой-либо части предоставленного кода, возможно, добавив это после $user->setPassword($password);?

$em = $this->getDoctrine()->getEntityManager();
$em->persist($entity);
$em->flush();

Убедитесь, что пользователь вставлен в вашу базу данных и что пароль и соль присутствуют, аутентификация не будет выполнена, если соль не будет сохранена.

Кроме того, я не использовал sha512, но я думаю, что вы не создаете соль правильно, попробуйте вместо этого:

$user->setSalt(hash('sha512', $user->getPassword()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...