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

标签 php symfony events 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我错过了什么?

有什么想法吗?

提前致谢!

最佳答案

如我所见,在 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/

相关文章:

php - Doctrine - Managed Entity - 默认情况下不管理获取的实体

swift - MouseDown 事件阻止 NSCollectionView 委托(delegate)方法

javascript - 将参数传递给函数

php - 修改/编译开源项目源代码的最佳方法是什么?

php - HTTP 请求失败 所需长度

php - Shopify订单数组问题

php - 如何向 Symfony 添加 Ajax 功能

php - Symfony 2 session 在通过 AJAX 调用创建后不会持续存在

php - 在自定义记录器中打印变量时排除对象

c# - 如何响应 ContextMenuStrip 项单击