2012-02-23 136 views
2

我遇到登录问题。我在数据库的表中使用正确的登录名。这里是my controllerSymfony 2.0.4 - 登录时出现错误凭据

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 

请帮助我。 此致敬礼。

+0

作为第一个念头。你为什么不使用FOSUserBundle(https://github.com/FriendsOfSymfony/FOSUserBundle),这是为应对在Symfony的用户登录/注册流程做? – 2012-02-23 20:00:56

+0

您是故意使用FOSUserBundle还是因为您不知道? – Nanocom 2012-02-23 20:10:34

+2

我写硕士论文,我不使用包 – adibak20 2012-02-23 23:42:34

回答

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(); 

检查用户被插入数据库,并且密码和盐的存在,如果盐不保留该认证将失败。

而且,我还没有使用SHA512,但我认为你没有正确创建盐,而不是尝试:

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