当用户冒充其他用户时,我正在尝试重定向。
为此,我注册了一项服务:
ACME_listener.security_switch_user:
class: ACME\CustomerLoginBundle\Listener\SecuritySwitchUserListener
arguments: [@service_container, @router, @security.context]
tags:
- { name: kernel.event_listener, event: security.switch_user, method: onSecuritySwitchUser }
我的监听器类看起来像这样:
namespace ACME\CustomerLoginBundle\Listener;
use Symfony\Component\Security\Http\Event\SwitchUserEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Http\Firewall\ListenerInterface;
class SecuritySwitchUserListener implements ListenerInterface {
public function __construct($appContainer, $router) {
$this->router = $router;
$this->appContainer = $appContainer;
}
public function onSecuritySwitchUser(SwitchUserEvent $event) {
echo "im in here!";
// this does get called
}
public function handle(GetResponseEvent $event) {
echo "but not here :(";
// this does not get called!
}
}
现在问题是我无法从onSecuritySwitchUser
方法中重定向用户。返回RedirectResponse
不起作用且SwitchUserEvent
没有setResponse()
方法。
我必须做什么才能调用handle()
方法?
答案 0 :(得分:0)
我认为handle()
来自onSecuritySwitchUser()
。但我错了。
<强>更新强>
您可以使用自己的请求覆盖该事件:)
看看:
Symfony\Component\Security\Http\Firewall\SwitchUserListener
然后使用覆盖请求Dispach新的SwitchUserEvent
if (null !== $this->dispatcher) {
$switchEvent = new SwitchUserEvent($request, $token->getUser());
$this->dispatcher->dispatch(SecurityEvents::SWITCH_USER, $switchEvent);
}
也许这会对你有帮助。