2012-02-23 46 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()));