Bonjour,
Je suis en train de tester le fonctionnement de security et je rencontre un problème :malgré l'encodage du nom d'utilisateur et le mot de passe que je pense avoir correctement configurés, j'ai toujours le message d'erreur suivant :
"Identifiants invalides."
Voici ma configuration dans secutity.yaml :
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
from_database:
entity:
class: 'App\Entity\User'
property: 'username'
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
logout:
path: /logout
target: /
# activate different ways to authenticate
# http_basic: true
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
form_login:
check_path: login
# https://symfony.com/doc/current/security/form_login_setup.html
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER }
encoders:
App\Entity\User:
algorithm: bcrypt
cost: 12
Mon SecurityController.php :
<?php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="login")
*/
public function login(AuthenticationUtils $authenticationUtils)
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername,
'error' => $error,
]
)
;
}
}
Et mon template :
{% extends 'base.html.twig' %}
{% block title 'Se connecter' %}
{% block body %}
<div class="container mt-4">
{% if error %}
<div class="alert alert-danger">
{{ error.messageKey | trans(error.messageData, 'security') }}
</div>
{% endif %}
<form action="{{ path('login') }}" method="post">
<div class="form-group">
<label for="username">Nom d'utilisateur</label>
<input type="text" id="username" name="_username" class="form-control" value="{{ last_username }}">
</div>
<div class="form-group">
<label for="password">Mot de passe</label>
<input type="password" id="password" name="_password" class="form-control">
</div>
<button type="submit" class="btn btn-primary">Se connecter</button>
</form>
</div>
{% endblock %}
Pour créer un utilisateur, j'ai écrit cette fixture que j'ai ensuite exécutée :
<?php
namespace App\DataFixtures;
use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class UserFixtures extends Fixture
{
/**
* @var UserPasswordEncoderInterface
*/
private $encoder;
public function __construct(UserPasswordEncoderInterface $encoder)
{
$this->encoder = $encoder;
}
public function load(ObjectManager $manager)
{
$user = new User();
$user->setUsername('demo');
$user->setPassword($this->encoder->encodePassword($user, 'demo'));
$manager->persist($user);
$manager->flush();
}
}
Dans ma table user, je retrouve bien l'enregistrement correspondant avec le mot de passe crypté.
Je ne comprends pas d'où provient l'erreur. Quelqu'un aurait une piste?
Merci d'avance pour votre aide.