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);
}
}
sollten Sie die Codes hier hinzufügen. Übrigens sind die Pastebin-Links kaputt (wahrscheinlich abgelaufen) –
Entschuldigung! Du hast recht, da ist der Code, ich hoffe du kannst mir helfen! Vielen Dank! – Throoze