2012-02-23 22 views
2

ログインに問題があります。私はデータベース内のテーブルで正しいログインを使用します。ここにはmy controllerがあります。Symfony 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

を。 symfonyのユーザログイン/サインアッププロセスを扱うために作られたFOSUserBundle(https://github.com/FriendsOfSymfony/FOSUserBundle)を使用してみませんか? –

+0

あなたはFOSUserBundleを意図的に使用していないか、またはあなたがそれを知らないために使用していませんか? – Nanocom

+2

私はマスター論文を書くと私はパッケージを使用していない – adibak20

答えて

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())); 
関連する問題