Symfony 2.0.4 - 登录时凭据错误

时间:2012-02-23 12:32:50

标签: symfony

我登录时遇到问题。我在数据库中的表中使用正确的登录。这是my controller

我的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 :(得分:0)

我注意到一些问题:

您没有使用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 documentation中的存根并为我工作。

我认为用户不会被保留在提供的代码的任何部分,可能会在$user->setPassword($password);之后添加?

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

检查用户是否已插入数据库中,并且密码和salt存在,如果盐未持久存在,则身份验证将失败。

另外,我没有使用sha512,但我认为你没有正确创建盐,请尝试:

$user->setSalt(hash('sha512', $user->getPassword()));