Определить первый логин FOSFacebookBundle
Я успешно внедрил FOSFacebookBundle с FOSUserBundle. Все отлично работает.
Теперь я хотел бы иметь возможность обнаружить первое соединение пользователя с FOSFacebookBundle.
У меня есть FacebookAuthenticationSuccessHandler, который вызывается каждый раз, когда аутентификация Facebook проходит успешно, но я хотел бы объявить своего рода "FirstFacebookAuthenticationSuccessHandler", вызываемый только в том случае, если пользователь еще не существовал. Цель этого обработчика - иметь возможность отправлять приветственное письмо каждому новому пользователю.
Для классической регистрации я просто использую RegistrationSuccessListener.
У вас есть идеи, как я могу это сделать?
1 ответ
Отвечая на мой собственный вопрос, когда я нашел решение.
1 / Я создал (и зарегистрировал) новый прослушиватель событий с именем NewFacebookUserListener:
...
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
MyCustomEvents::NEW_FACEBOOK_USER => 'onNewFacebookUser'
);
}
public function onNewFacebookUser(UserEvent $event)
{
// we get the user
$user = $event->getUser();
// and now you can do what you wish
}
2 / В моем FacebookProvider (расположенном в разделе Безопасность / Пользователь / Провайдер) я добавил несколько строк для отправки этого нового события:
$user->setFBData($fbdata);
// we send a "FB user created" event
$dispatcher = $this->container->get('event_dispatcher');
$dispatcher->dispatch(MyCustomEvents::NEW_FACEBOOK_USER, new UserEvent($user, $this->container->get('request')));
И, как и ожидалось, событие отправляется только при создании нового пользователя Facebook.