我希望用户注册,确认是电子邮件,但由管理员手动激活。
感谢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我错过了什么?
有什么想法吗?
提前致谢!
最佳答案
如我所见,在 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
使用react并禁用用户 => http://symfony.com/doc/master/bundles/FOSUserBundle/controller_events.html
2) 覆盖 RegistrationController
=> https://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html
我更喜欢第一个选项。
class RegistrationListener implements EventSubscriberInterface
{
/** @var EntityManager */
private $em;
/**
* @param EntityManager $em
*/
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_CONFIRMED => 'onRegistrationCompleted'
);
}
public function onRegistrationCompleted(UserEvent $event) {
// registration completed
// TODO: disable the user. How?
$user = $event->getUser();
$user->setEnabled(false);
$this->em->persist($user);
$this->em->flush();
}
}
关于php - FOSUserBundle:如何允许注册、确认但不激活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44888001/