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.

1 réponse


dubitoph
Auteur
Réponse acceptée

Résolu en passant le password en varchar 255