2012-04-13 4 views
4

Ich habe die official documentation auf die Verwendung der Sicherheit von Symfony 2 Standardverteilung zur Authentifizierung meiner Benutzer, persistent sie in der Datenbank durch Doctrine2, und es scheint alles in Ordnung in Bezug auf die Konfiguration , aber ich bekomme immer den gleichen Fehler: Bad Credentials.Symfony 2 Sicherheit immer zurück Bad Credentials Fehler

Ich habe die DoctrineFixturesBundle verwendet, um einige Benutzer und Rollen zu laden, und es scheint das Laden zu vervollständigen ok. Also, ich denke, das Problem ist irgendwo in der Authentifizierung, die für mich transparent ist ... Ich weiß nicht, wie Sie dies debuggen und würde jede Hilfe zu schätzen wissen ...

Vielen Dank! Wenn Sie ein anderes Code-Snippet benötigen, lassen Sie es mich wissen und ich werde die Frage bearbeiten. Ich habe nicht den Code hier eingefügt, die Frage besser lesbar zu machen ....

EDIT 2: Wie @Dieter vorgeschlagen, überprüfte ich die Protokolle, und es scheint keine Daten an die Abfrage übergeben werden, die ist sehr seltsam, da ich jede Konvention, die sie erwähnt haben, in the cookbook verfolgt habe ... Hier ist auch die Definition meines Anmeldeformulars. Entschuldigung für die lange Frage! Jede Hilfe würde sehr geschätzt werden!

Snippet 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, 
    )); 
    } 

app/logs/dev.log Ausgabe:

[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: Da meine Pastebin Links abgelaufen ist, und, wie von Peter vorgeschlagen Porfey, das ist der Code:

Dies ist meine 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 } 

und mein Controller:

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, 
         ) 
    ); 
} 

Hier ist der Code der Befestigungsdatei ist:

<?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

sollten Sie die Codes hier hinzufügen. Übrigens sind die Pastebin-Links kaputt (wahrscheinlich abgelaufen) –

+0

Entschuldigung! Du hast recht, da ist der Code, ich hoffe du kannst mir helfen! Vielen Dank! – Throoze

Antwort

9

Wenn ein ähnlicher Fehler passiert mit meinem, gibt es immer eine Art von Problem in App angezeigt /logs/dev.log oder im Systemprotokoll wie /var/log/apache2/error.log.
Siehst du da oben etwas auftauchen?

EDIT: Als Reaktion auf Ihre neue Informationen

Gibt es einen Grund, warum Sie das selbst bauen bilden? Wie in den Dokumenten erwähnt, die Sie referenzieren, können Sie einfach die Zweigvorlage erstellen und den Feldern die Namen "username" und "password" zuweisen. Die Magie sollte dann für dich getan werden.

+0

Hallo! danke für die Antwort! Ich aktualisierte meine Frage, indem ich die Informationen hinzufügte, die ich in den Protokollen als relevant fand ... Es scheint, dass keine Daten an die Abfrage weitergegeben werden, aber ich habe keine Ahnung, was dies verursachen könnte, da ich jeder Konvention die Erwähnung in [dem Kochbuch] (http : //symfony.com/doc/current/book/security.html#using-a-traditional-login-form) ... Jede Hilfe wäre sehr willkommen! – Throoze

+1

Sie haben Recht! Da ich eine Formularklasse erstellt habe, wurden die Namen des Feldes so geändert, dass sie den Formularnamen enthalten. Daher wurde "login [_username]' anstelle von '_username' gerendert ... Ich weiß nicht, warum ich nicht gesehen habe es!!hehehe Vielen Dank! – Throoze

+0

Toll zu hören, es hat funktioniert :-) Prost! – Dieter