Je développe un projet sous Symfony2 et j'utilise fosuser pour la gestion des utilisateurs. Après inscription, j'envoie un email à l'utilisateur qui s'est inscrit. Cependant j'ai remarqué que le bundle fosuser connecte automatiquement l'utilisateur et c'est un comportement que je ne désire pas pour mon application. J'ai utilisé les événements pour empêcher ce comportement. L'utilisateur n'est plus connecté automatiquement cependant l'envoi d'email ne marche plus. Ci dessous les bouts de code:
<?php
namespace App\UsersBundle\Listeners;
use FOS\UserBundle\Doctrine\UserManager;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\FOSUserEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\DependencyInjection\Container;
/** Envoi email à l'utilisateur inscrit */
class UserRegistrationListener implements EventSubscriberInterface {
private $userManager;
private $mailer;
private $container;
public function __construct(UserManager $userManager, \Swift_Mailer $mailer, Container $container)
{
$this->userManager = $userManager;
$this->mailer = $mailer;
$this->container = $container;
}
public static function getSubscribedEvents()
{
return [FOSUserEvents::REGISTRATION_COMPLETED => 'onRegistrationCompleted'];
}
public function onRegistrationCompleted(FilterUserResponseEvent $event)
{
$user = $event->getUser();
//envoie mail
$message = \Swift_Message::newInstance()
->setSubject('Vos identifiants')
->setFrom(array('beintechdev@gmail.com' => 'L\'équipe larra'))
->setTo('omardione1991@gmail.com')
->setContentType("text/html")
->setBody(
$this->container->get('templating')->render('@Users/Default/email.html.twig', array(
'email' => $user->getEmail()
))
)
;
$this->mailer->send($message);
}
}
<?php
/**
* Created by PhpStorm.
* User: coura
* Date: 04/09/2015
* Time: 07:51
* Not log automatically user when registered
*/
namespace App\UsersBundle\Listeners;
use FOS\UserBundle\Event\FilterUserResponseEvent;
/** Empecher connexion automatique apres enregistrement **/
class RegistrationListener {
public function onKernelResponse(FilterUserResponseEvent $event)
{
$event->stopPropagation();
}
}
Bon j'ai finalement opté pour la validation par confirmation email. Puis j'écoute l'événement REGISTRATION_CONFIRMED pour lui envoyer un email avec ses identifiants.