Bonjour,

Je suit actuellement le cours d'introduction a Symfony de Grafikart. J'en suit a la creation de la page login pour les admin. La page est crée e ainsi que l'user et la connection marche mais lorsque je suis connecté dans la debug bar n'apparait pas le nom de mon user mais "n/a". Je suis pourtant bien en "Authenticated : Yes" donc je ne comprend pas. Du coup le "if app.user" ne fonctionne pas et j'ai l'impression que cela viens de la.

Voici mon security.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
            # https://symfony.com/doc/current/security.html#firewalls-authentication

            form_login:
                check_path: login

            # https://symfony.com/doc/current/security/impersonating_user.html
            # switch_user: true

    # 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 }

    encoders:
        App\Entity\User:
           algorithm: auto
           cost: 12

Ainsi que le controller :

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;

Class SecurityController extends AbstractController{

    /**
     * @Route("/login", name="login" )
     * @return Response
     */

    public function login(AuthenticationUtils $authenticationUtils){

        $lastUsername = $authenticationUtils->getLastUsername();
        $error = $authenticationUtils->getLastAuthenticationError();

        return $this->render('security/login.html.twig', [
            'last_username' => $lastUsername,
            'error' => $error,
            'current_menu' => 'login'
        ]);

    }

}

Et enfin le template :


{% extends 'base.html.twig' %}

{% block title %}Se connecter{% endblock %}

{% 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">Login</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 %}

Merci a vous j'avoue que j'ai recherché si d'autres avait eu ce soucis mais n'ai rien trouvé. Si vous avez besoin de plus d'informations sur mon code ou sur le symfony profiler n'hesitez pas a demander.

1 réponse


Bonjour,
est-ce que tu as un "authentificateur Guard" dans App\Security ?

si oui ajoute a partir de la ligne "guard:" dans ton Security.yaml

# config/packages/security.yaml
security:
    # ...

    firewalls:
        main:
            # ...
            guard:
                authenticators:
                    - App\Security\LoginFormAuthenticator

Pour plus d'info regarde la doc de symfony https://symfony.com/doc/current/security/form_login_setup.html