2017-07-03 4 views
1

私はユーザに登録し、そのメールを確認したいが、は管理者によって手動で有効にされているFOSUserBundle:登録を許可する方法、確認は必要ですが有効化はできません。

thisページのおかげで、私はFOSUserEvents::REGISTRATION_CONFIRMEDを見つけました。これはメールの確認リンクをクリックした直後です。

今、アカウントを無効にしたいと思います(下記参照)。

class RegistrationListener implements EventSubscriberInterface 
{ 
    public static function getSubscribedEvents() 
    { 
     return array(   
      FOSUserEvents::REGISTRATION_CONFIRMED => 'onRegistrationCompleted' 
     ); 
    } 

    public function onRegistrationCompleted(UserEvent $event) { 
     // registration completed 
     // TODO: disable the user. How? 
    } 
} 

私が逃したconfigurationはありますか?

アイデア?

ありがとうございます!

答えて

2

私はFOS\UserBundle\Controller\RegistrationController:: confirmAction()ユーザー内で、見ることができるように有効になっている:

/** 
* Receive the confirmation token from user email provider, login the user. 
* 
* @param Request $request 
* @param string $token 
* 
* @return Response 
*/ 
public function confirmAction(Request $request, $token) 
{ 
    /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */ 
    $userManager = $this->get('fos_user.user_manager'); 

    ... 

    $user->setConfirmationToken(null); 
    $user->setEnabled(true); 

    $event = new GetResponseUserEvent($user, $request); 
    $dispatcher->dispatch(FOSUserEvents::REGISTRATION_CONFIRM, $event); 

    $userManager->updateUser($user); 
    ... 

    $dispatcher->dispatch(FOSUserEvents::REGISTRATION_CONFIRMED, new FilterUserResponseEvent($user, $request, $response)); 

    return $response; 
} 

私はあなたがそれを無効にするために行うことができます二つのことを考えることができます。

1)FOSUserEvents::REGISTRATION_CONFIRMEDに反応して無効にするイベントリスナーを、書き込みユーザー=>http://symfony.com/doc/master/bundles/FOSUserBundle/controller_events.html

2)私は最初のオプションを好むRegistrationController =>https://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html

上書き。

+0

あなたは '$ user'をすでに持っていますが、あなたは' persist'を使う必要はありません。 ''フラッシュ 'で十分です。 –

+0

私が探していたものとまったく同じです。ありがとうございました! –

関連する問題