gpt4 book ai didi

php - FOSUserBundle:如何允许注册、确认但不激活?

转载 作者:行者123 更新时间:2023-12-04 02:04:07 25 4
gpt4 key购买 nike

我希望用户注册,确认是电子邮件,但由管理员手动激活

感谢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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com