2012-04-13 8 views
4

私はに従って、symfony 2の標準ディストリビューションが提供するセキュリティを使用してユーザーを認証し、Doctrine2を介してデータベースに保存しています。しかし、私はいつも同じエラーを受け取ります:Bad CredentialsSymfony 2のセキュリティは常にBad Credentialsのエラーを返します

私はDoctrineFixturesBundleを使用していくつかのユーザーとロールを読み込んでいますが、読み込みが完了したようです。だから私は問題はどこかで私には透過的な認証プロセスのどこかにあると思います...私はこれをデバッグする方法はわかりませんし、助けていただければ幸いです...

ありがとう!他のコードスニペットが必要な場合はお知らせください。質問を編集します。私は質問を読みやすくするために、ここにコードを貼り付けていませんでした....

EDIT 2@Dieterによって示唆されるように、私は、ログをチェックし、何のデータがクエリに渡されていないようだ、これthe cookbookで言及しているすべての大会に従って以来、とても奇妙です...私のログインフォームの定義もここにあります。長い質問を申し訳ありません!どんな助けでも大歓迎です!

LoginType.phpの抜粋:

public function buildForm(FormBuilder $builder, array $options) { 
    $builder->add('_username', 'text', array(
     'label' => 'Email ', 
     'required' => true, 
    )); 
    $builder->add('_password', 'password', array(
     'label' => 'Password ', 
     'required' => true, 
    )); 
    $builder->add('_remember_me', 'checkbox', array(
     'label' => 'Remember me ', 
     'required' => false, 
    )); 
    } 

アプリ/ログ/ dev.log出力:

[2012-04-17 03:43:01] event.DEBUG: Notified event "kernel.request" to listener 
         "Symfony\Component\Security\Http\Firewall::onKernelRequest". 
         [] [] 
[2012-04-17 03:43:01] doctrine.DEBUG: SET NAMES UTF8 ([]) [] [] 
[2012-04-17 03:43:01] doctrine.DEBUG: SELECT t0.id AS id1, t0.username AS 
         username2, t0.salt AS salt3, t0.password AS password4, 
         t0.is_active AS is_active5, t0.mailer_id AS mailer_id6 
         FROM SfUser t0 WHERE t0.username = ? (["NONE_PROVIDED"]) 
         [] [] 
[2012-04-17 03:43:01] security.INFO: Authentication request failed: Bad 
         credentials [] [] 
[2012-04-17 03:43:01] security.DEBUG: Redirecting to/[] [] 

EDIT: ピーターによって示唆されているように私のペーストビンリンクは、有効期限が切れ、そしてので、 Porfey、コード:

これは私のsecurity.ymlです

security: 
    encoders: 
     ElCuadre\AccountBundle\Entity\User: sha512 

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

    providers: 
     user_db: 
      entity: { class: ElCuadre\AccountBundle\Entity\User, property: username} 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 
     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      form_login: 
       login_path:/
       check_path: /login_check 
      logout: 
       path: /logout 
       target:/
      remember_me: 
       key:  %secret% 
       lifetime: 3600 
       path: /
       domain: ~ # Defaults to the current domain from $_SERVER 

    access_control: 
     - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

と私のコントローラ:

public function loginAction() { 
    $request = $this->getRequest(); 
    $session = $request->getSession(); 

    // get the login error if there is one 
    if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) { 
     $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR); 
    } else { 
     $error = $session->get(SecurityContext::AUTHENTICATION_ERROR); 
     $session->remove(SecurityContext::AUTHENTICATION_ERROR); 
    } 

    $form = $this->createForm(new LoginType()); 
    return $this->render(
        'ElCuadreAccountBundle:Auth:login.html.twig', 
        array(
         'form'   => $form->createView(), 
         'last_username' => $session->get(
               SecurityContext::LAST_USERNAME), 
         'error'  => $error, 
         ) 
    ); 
} 

ここでは、フィクスチャファイルのコードです:

<?php 

namespace ElCuadre\AccountBundle\DataFixtures\ORM; 

use Doctrine\Common\Persistence\ObjectManager; 
use Doctrine\Common\DataFixtures\FixtureInterface; 
use Doctrine\Common\DataFixtures\AbstractFixture; 
use ElCuadre\AccountBundle\Entity\User; 
use ElCuadre\AccountBundle\Entity\Role; 
use Symfony\Component\DependencyInjection\ContainerAwareInterface; 
use Symfony\Component\DependencyInjection\ContainerInterface; 

class LoadAccountData extends AbstractFixture implements FixtureInterface, ContainerAwareInterface { 

    private $container; 

    public function setContainer(ContainerInterface $container = null) { 
    $this->container = $container; 
    } 

    private function loadRole($manager, $name, $roleName) { 
    $role = new Role(); 
    $role->setName($name); 
    $role->setRole($roleName); 
    $manager->persist($role); 
    $manager->flush(); 
    return $role; 
    } 

    private function loadUser($manager, $username, $password, $roles) { 
    $user = new User(); 
    $user->setUsername($username); 
    $encoder = $this->container->get('security.encoder_factory')->getEncoder($user); 
    $user->setPassword($encoder->encodePassword($password, $user->getSalt())); 
    foreach ($roles as $role) { 
     $user->addRole($role); 
    } 
    $manager->persist($user); 
    $manager->flush(); 
    } 

    public function load(ObjectManager $manager) { 
    // Roles: 
    $roleUser = $this->loadRole($manager, 'user', 'ROLE_USER'); 
    $roleProvider = $this->loadRole($manager, 'provider', 'ROLE_PROVIDER'); 
    $roleAdmin = $this->loadRole($manager, 'admin', 'ROLE_ADMIN'); 
    $roleSuperAdmin = $this->loadRole($manager, 'superadmin', 'ROLE_SUPER_ADMIN'); 
    // Users: 
    $this->loadUser($manager, '[email protected]', 'userpass', $roleUser); 
    $this->loadUser($manager, '[email protected]', 'providerpass', $roleProvider); 
    $this->loadUser($manager, '[email protected]', 'adminpass', $roleAdmin); 
    $this->loadUser($manager, '[email protected]', 'superadminpass', $roleSuperAdmin); 
    } 
} 
+1

ここにコードを追加する必要があります。 btwペーストビンのリンクが壊れている(恐らく期限切れ) –

+0

申し訳ありません!あなたは正しいです、コードがあります、私はあなたが私を助けることを願っています!ありがとう! – Throoze

答えて

9

同様のエラーが私に発生した場合は、アプリに表示される問題のいくつかの種類が常にあります/logs/dev.log、または/var/log/apache2/error.logのようなシステムログに記録されます。
そこに何かが現れていますか?

EDIT:あなたの新しい情報

への反応として、あなたは自分自身を形成する構築する理由はありますか?あなたが参照しているドキュメントで述べたように、小枝テンプレートを作成し、フィールドに '_username'と '_password'という名前を付けることができます。魔法はあなたのために行われるべきです。

+0

こんにちは!回答ありがとうございます!ログに関連する情報を追加して質問を更新しました...クエリにデータが渡されていないようですが、何が起こるかはわかりません。すべての慣習に従って[cookbook](http ://symfony.com/doc/current/book/security.html#using-a-traditional-login-form)...どんな助けでも大歓迎です! – Throoze

+1

あなたは正しいです!私はフォームクラスを作っていたので、フォーム名を保持するようにフィールドの名前が変更されていたので、 '_username'の代わりに' login [_username] 'と表示されました...なぜ私は見なかったのですかそれ!!heheheありがとう! – Throoze

+0

それは聞いて偉大な仕事:-)乾杯! – Dieter

関連する問題