如果$ user-> isDisabled()与Silex重定向到user.activate

时间:2014-01-14 21:53:34

标签: php symfony silex

如果未激活用户,我正尝试将用户重定向到激活页面(user.activate)。我主要想在登录时进行此操作,但即使用户已登录,其余的好处也就是检查它。

我尝试扩展Symfony\Component\Security\Core\User\UserChecker并返回RedirectResponse,如果它捕获了一个DisabledException但它没有处理响应。

我尝试检查if ($user->isDisabled())AuthenticationEvents::AUTHENTICATION_FAILURE事件中的AuthenticationEvents::AUTHENTICATION_SUCCESS,但也没有处理回复。

2 个答案:

答案 0 :(得分:1)

我添加了这个课程

class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{
    protected $app;

    public function __construct(Application $app)
    {
        $this->app = $app;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        $user = $token->getUser();

        if (!$user->isEnabled())
        {
            // Logout
            $this->app['user.manager']->logout();

            $response = $this->app->redirect($this->app['url_generator']->generate('user.activate', array('id' => $user->id)));
        } 
        else
        {
            // redirect the user to where they were before the login process begun.
            $referer_url = $request->headers->get('referer');

            $response = new RedirectResponse($referer_url);
        }

        return $response;
    }
}

然后补充说:

$app['security.authentication.success_handler.secured_area'] = $app->share(function ($app) {
    return new \Kidtrips\Lib\LoginSuccessHandler($app);
});

答案 1 :(得分:0)

我没有做与安全相关的事情,而是采用另一种方式,使用请求监听器。

使用onCoreRequest函数创建一个新类,并在事件调度程序中为kernel.request事件注册它。它将获得一个Symfony\Component\HttpKernel\Event\GetResponseEvent实例作为单个参数。

在那里,您可以检查是否有用户登录并且是否已禁用,然后使用事件的setResponse事件进行重定向。