如果未激活用户,我正尝试将用户重定向到激活页面(user.activate)。我主要想在登录时进行此操作,但即使用户已登录,其余的好处也就是检查它。
我尝试扩展Symfony\Component\Security\Core\User\UserChecker
并返回RedirectResponse,如果它捕获了一个DisabledException但它没有处理响应。
我尝试检查if ($user->isDisabled())
和AuthenticationEvents::AUTHENTICATION_FAILURE
事件中的AuthenticationEvents::AUTHENTICATION_SUCCESS
,但也没有处理回复。
答案 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
事件进行重定向。