Определить первый логин 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.

Другие вопросы по тегам