[Symfony 4] – Gestion des utilisateurs sans FosUserBundle Chapitre 2

@deprecated : nouvelle version => http://blog.dev-web.io/2018/10/30/symfony-4-gestion-utilisateurs-sans-fosuserbundle-v2018-chapitre-1/

Un court chapitre où nous allons juste implémenter la fonction de connexion d’un utilisateur.

Pour cela nous allons avoir besoin de faire encore un peu de configuration, nous allons tout d’abord mettre à jour le firewall principal du fichier secrity.yaml :

On va aussi modifier le fichier framework.yaml pour y ajouter la gestion des sessions et la protection xcrf

On va créer notre controller de login et logout, rien de compliqué, dans App/Controller/SecurityController.php :

Si ce n’est pas déjà fait, on va créer 1 controller qui contiendra 2 routes : index et admin

La page index sera la landing page de notre site, la page admin sera la partie sécurisée où seul les admins seront autorisés à y accéder :

Et les templates qui vont bien :

index.html.twig

Admin/index.html.twig

On va aussi créer un template pour notre formulaire de connexion, Security/login.html.twig

A ce point et si on a rien oublié on doit pouvoir se connecter en accédant à la page /login et en saisissant les identifiants qui sont dans votre fichier fixtures.

Dans le prochain chapitre nous verrons comment un utilisateur peut s’inscrire sur le site.
Vous pouvez retrouver les sources complètes ici : https://github.com/gponty/userDemo

25 commentaires

  1. bonjour, merci pour ce tuto
    2 questions :
    quand je clique sur connexion, cela me met que le systeme ne trouve pas le fichier (Security/login.html;twig ) pourtant j’ai bien ? Je passe par un host et virtual host
    host : 127.0.0.1 kcc

    ServerName kcc
    DocumentRoot C:\kcc\public

    AllowOverride All
    Require all granted
    Options -Indexes

    De plus comment activé la bar symfony avec symfony4 ( je parle du app_dev.php)

  2. Bonjour Stephane,
    Désolé pour ma réponse tardive.

    Est-ce que tes fichiers twig se trouvent bien dans c:\kcc\templates\Security\login.html.twig ?

    Pour la toolbar je te recommande d’installer le package debug :
    composer require debug –dev
    (Même si en théorie tu n’auras besoin que de profiler-pack)

    Bonne journée,

  3. Salut,
    super Tuto. j’ai essaye de suivre les étapes. Apres clic j’ai cette erreur: Invalid CSRF token. Peux tu me m’aider a résoudre ce problème?

    Merci d’avance.

    1. Hello et merci,
      Peut-être as-tu oublié cette ligne :

      input type= »hidden » name= »_csrf_token » value= »{{ csrf_token(‘authenticate’) }} »

      ?

      1. c’est un copier coller du tient.
        alors j’ai reussi a le faire partit en mettant une secrure area mais le problème c’est que la redirection ne ce fait plus.

  4. Bonjour,

    Tout d’abord merci pour le tuto, cependant j’ai des problèmes lors de la connexion

    Aucune erreur de compilation du code, tout marche, mais lorsque je m’identifie avec des identifiants injectés dans la base, cela ne fonctionne pas, il me retourne sur une page blanche, et si je force pour aller dans « /admin » il me renvoie dans « /login » et le profiler n’apparaît même plus.

    Que faire ? Merci d’avance

      1. Salut,

        Désolé de la réponse tardive, mais j’ai cherché avec des amis pendant 4 heures, j’ai repris pas à pas ce que tu as fais dans le tutoriel, même copier/coller, ça n’a jamais fonctionner, mais en prenant ton archive github directement, tout à fonctionner directement, donc je ne comprends toujours pas mais j’ai réussi à finaliser mon projet

        Merci d’avance !!

  5. Le tuto est juste énorme !
    Merci.

    Petite précision :
    Lorsque un user déclenche une 403, on catche où l’exception générée ?

      1. J’ai le même problème: Tous mes utilisateurs avec le role ROLE_USER soulèvent cette exception. Faut il les rediriger vers la page d’index dans la clause finally ?

  6. Bonjour,

    Super initiative ce tuto, car les docs Symfony ne sont clairement pas au point !

    Question:

    Est-ce que dans le fichier security.yaml, dans firewalls: main:, il ne faudrait pas ajouter:
    provider: database_users ?

    1. Bonjour, oui bien d’accord avec toi pour la doc symfony !
      Pour le provider: database_users, il y ai déjà (tout en haut de l’article)

  7. Bonjour et merci pour ce tuoto.
    J’ai un message d’erreur lorsque je me rend sur la page login:

    Notice: Undefined property: Symfony\Component\Security\Http\Authentication\AuthenticationUtils::$getLastUsername

    Je ne vois pas mon erreur. Pouvez-vous m’aider ?

  8. Salut ! super tuto !
    SImplement mes messages flash restent en anglais, mon framework est bien décommenté en fr… Mon fichier translation:
    framework:
    default_locale: ‘%locale%’
    translator:
    paths:
    – ‘%kernel.project_dir%/translations’
    fallbacks:
    – ‘%locale%’

    Quand j’ouvre la bare symfony je suis bien en fr… Juste le message flash en cas de mauvais login par exemple reste en francais… Une idée de comment faire ?

    Merci d’avance !

    1. ahahah !! Oui c’est vrai, le problème ne naviguer entre les différentes version de symfony !

      dans le fichier config/packages/translation.yaml
      tu dois avoir :
      framework:
      default_locale: ‘%locale%’

      et dans le fichier config/service.yaml :
      parameters:
      locale: ‘fr’

  9. Bonjour Loskiki,
    Il suffit de modifier le fichier security.yaml
    et de mettre soit username soit email sur cette ligne :
    providers:
    database_users:
    entity: { class: App\Entity\User, property: email }

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.