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

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

Nous allons voir comment un utilisateur peut s’inscrire sur notre site et ainsi accéder à certaines fonctions du site réservé aux inscrits.

On va tout d’abord ajouter le composant form à notre projet :

Ensuite nous allons modifier notre class User pour y ajouter 2 contraintes :

  • Un login unique
  • Un mail unique

Ceux qui veut dire que si un utilisateur essaie de s’inscrire avec un username ou login déjà existant, il ne pourra pas le faire mais en plus on lui affichera un message d’erreur.

Et on va ajouter d’autres contrôles :

  • Username
  • Email renseigné
  • Mot de passe renseigné

On verra plus tard comment contrôler le mot de passe, voici ce que nous donne notre classe User mis à jour :

Nous allons aussi avoir besoin du formulaire qui va permettre à l’utilisateur de s’inscrire. Pour cela on va utilise un type form qui reprendra pratiquement toutes les zones de notre class User, vous noterez que le mot de passe sera à saisir 2 fois afin de contrôler qu’il soit bien identique :

Bien évidemment on va avoir besoin d’un controller et d’un template :

Voilà pour l’inscription d’un utilisateur, vous pourrez par vous-même envoyer un mail de confirmation si l’inscription est valide.

Les sources se trouvent ici : https://github.com/gponty/userDemo

Dans le prochain chapitre nous verrons comment l’utilisateur peur modifier son mot de passe et le modifier si il l’a oublié.

 

13 commentaires

  1. Bonjour,
    Merci pour le tuto!
    Par contre, j’ai une erreur quand je veux accéder au registration form:

    FatalThrowableError
    HTTP 500 Internal Server Error
    Type error: Return value of App\Entity\User::getFullName() must be of the type string, null returned
    Exception Logs 2 Stack Trace
    Symfony\Component\Debug\Exception\
    FatalThrowableError
    in src/Entity/User.php (line 88)
    /** * @return string */ public function getFullName(): string { return $this->fullName; } /** * @param string $fullName */

    Il attend un string et on lui envoie un champ null c’est çà? Mais je vois pas à partir d’où et comment résoudre ce petit problème

    1. Bonjour et merci,

      Tu as oublié le ? avant string :
      public function getFullName(): ?string

      le ? indique que ça retourne une string ou un null

  2. Salut !

    Merci pour le tutoriel d’abord, sans toi jamais je ne m’attaquerais aux security bundle !

    Sinon j’ai une question, j’ai une base de donnée avec des utilisateurs et j’aimerais bien qu’il garde leur mot de passe. Donc j’ai essayé d’encodé les passwords comme tu le fait lorsque tu enregistre un nouvelle utilisateur. Mais dés que j’essaye d’invoquer UserPasswordEncoder symfony est pas très très content…

    J’ai essayé avec l’autowiring a partir de la route de login (puis en appelant une fonction qui devais faire le bind de tout les utilisateurs) mais symfony me répond

    Controller « App\Controller\SecurityController::login() » requires that you provide a value for the « $passwordEncoder » argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.

    Ducoup j’ai essayé tout plein de choses mais j’arrive toujours pas a le faire fonctionné…

    Ps: J’ai essayé de faire une requête stack overflow avant de te contacté mais c’est toujours en suspens 🙁

    Merci d’avance

    https://stackoverflow.com/questions/49693745/get-a-userpasswordencoder-instance-in-symfony-4?noredirect=1#comment86400384_49693745

    1. Bonjour et merci !
      Le mot de passe est codé ou il est en clair dans ta base ?
      Sinon il suffit de faire un script qui boucle sur les password et qui les encryte.

      1. Les passwords sont en claires dans la base, j’ai essayé de faire ce script mais je n’arrive pas a invoqué UserPasswordEncoder, pour encrypter les passwords en bcrypt

        1. J’ai finalement réussi à les encoder avec un UserPasswordEncoderInterface, mais dès que j’essaye de connecter un utilisateur j’ai toujours un « Bad Credentials » saurais-tu, comment puis-je débuguer cela ?

          Merci beaucoup pour tes réponses, ça m’a déjà bien aidé

          1. Hello,
            Peut-être que ton encodage n’est pas bon ?
            Essaie de créer un user avec un mot de passe que tu as déjà encodé, et compare les pour voir si ils sont identiques.

  3. Bonjour, et merci pour ce tuto, c’est une mine d’informations…
    Une question: tu as écrit: « Dans le prochain chapitre nous verrons comment l’utilisateur peur modifier son mot de passe et le modifier si il l’a oublié. »
    Je ne trouve pas cette partie-là dans les chapitres suivants… Pourrais-tu me préciser le lien STP ?
    Eric W.

  4. Bonjour !!
    Super tuto !!
    Simplement je ne trouve pas la suite ? « Dans le prochain chapitre nous verrons comment l’utilisateur peur modifier son mot de passe et le modifier si il l’a oublié. »

    Ce serait vraiment super de la faire 🙂 Parce que tout seul c’est chaud !

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.