Bonjour,

Je cherche à mettre en place sur Symfony 4 un système de validation par mail lors d'une inscription sur mon site.

Etant débutant je suis complètement perdu et arrive pas à trouver la solution.
Donc si vous avez des idées, une méthode ou même un tuto je suis preneur.

Merci par avance pour votre aide =)

10 réponses


TheTakylo
Réponse acceptée

Dans ce cas il faut que tu envoies un email je te conseille d'utiliser SwiftMailer qui est un composant de Symfony qui permet l'envoi des emails .

Dans la logique il faudrait que tu créer une table où tu stockerais des "tokens" qui seraient générés à chaque inscription (où demande de réinitialisation de mots de passe) et relié à un id utilisateur , token que tu enverrais dans un lien dans l'email.

Ensuite tu crée une route qui prendra en paramètre le token & permettra de savoir que l'utilisateur bien cliquer sur l'email et son lien (ex: tonsite.fr/validation-email/94a08da1fecbb6e8b46990538c7b50b2 le token)

schema de la table:

user_id
token
created_at // si jamais tu veut implémenter une limite de temps (ex: lien valide pendant 24h)

Tu peut utiliser le bundle https://symfony.com/doc/current/bundles/FOSUserBundle/index.html qui te permet de gèrer les utilisateurs simplement (inscription, connexion, validations par email, modif des infos,etc)

Ou bien tu peut le faire toi même et dans ce cas là il te faudra créer une entité pour les utilisateurs, un formulaires, etc.

Si tu ne cherche que la partie envoie de mail et que tu as déjà un système d'inscription, regarde ce lien https://symfony.com/doc/current/email.html

aka-aka
Auteur

Merci TheTakylo pour cette réponse rapide !

J'ai beaucoup vu de sujet sur FOSUserBundle mais je voudrais le faire moi-même pour ne pas être trop perdu dans du code qui ne me servira pas... puis je ne suis pas sûr que le Bundle FOSUser soit pertinent sur Symfony 4.

J'ai déjà une Entity pour les utilisateurs pour l'instant j'arrive très bien à m'inscrire et me connecter sur mon application. J’aimerais simplement rajouter une étape de validation par mail. Puis par la suite géré les mots de passe perdu, etc..

aka-aka
Auteur

Super TheTakylo !!

Merci pour cette piste, ça m'a l'air d'être plus simple que je le pensais ^^ .

aka-aka
Auteur

Salut je relance un appel...

J'ai quasiment terminé mais je bloque sur l'essentiel.

ou j'en suis :

  • L'utilisateur s'enregistre :
    • Dans la bbd est enregistré les infos d'utilisateur plus un Token unique.
  • Un mail est envoyer à l'utilisateur:
    • dans le mail un lien avec l'id et le Token
  • Au clique sur le lien, l'utilisateur est dirigé vers la page qui traite les informations.
    • Vérifie que l'Id existe et que le Token correspond bien avec l'Id
    • Si tout est bon le champ Token est passer a null.

Maintenant j'aimerais rajouter la condition pour ce connecter. Si le Token est null alors Ok si non message d'erreur.. je vois pas ou mettre cette condition... Certainement dans mon LoginAuthenticator mais je vois pas ou :/

Salut regarde le Userchecker
https://symfony.com/doc/current/security/user_checkers.html https://symfony.com/doc/current/security/user_checkers.html

et en réponse à TheTakylo FosUserbundle n'est pas recommandé pour symfony 4 et il a été retiré de la documentation.

aka-aka
Auteur

Merci pour ton retour olive140.
J'ai finalement trouvé. Mon systeme marche parfaitement. Yess !!

C'est tout simplement dans LoginAuthenticator la function getUser.

Pour FosUserbundle c'est ce qu'il me semblait ^^

Bonjour aka aka,
Je suis dans la meme situation que la tienne ,je doit mettre en place sur Symfony 3.2 un système de validation par mail lors d'une inscription sur mon site ,j'ai effectuer la partie enregistrement et login en suivant les tutos symfony mais maintenant je suis bloqué dans la partie d'envoie de mail et l'activation de compte est ce que tu peux m'aider en m'expliquant comment t'as fais étape par étape ,je suis novice et j'ai un deadline :(

aka-aka
Auteur

Bonjour,
Je te conseil de le faire par toi même le code. Inspire toi de cette video, c'est ce que j'ai fais.

https://www.grafikart.fr/tutoriels/confirmation-compte-824

En tant que novice je crois pas qui est bien de se mettre un deadline... prend plutot ton temps pour realisé petit à petit quelque chosse qu'il te conviens. Aprés tu peux utilisé FosUserbundle si il est compatible avec ta version de Symfony.

Pour info : (reste à voir la conpatibilité avec Symfony 3.2)
pour les mails utilise SwiftMailer

Bon courage et bon code.

Bonjour
merci pour votre réponse :)
je vais essayer de résoudre ce problème ,
ce n'est pas moi qui a fixer le deadline ,enfaite je suis fraichement embauché et mon boss ma donner 5j pour realiser cette tache(et je ne dois pas utiliser fosuserbundle),je suis hyper stressée et je ne trouve rien sur internet.