2

当用户冒充另一个用户时,我正在尝试进行重定向。

为此,我注册了一项服务:

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方法中重定向用户。返回 aRedirectResponse不起作用,并且 theSwitchUserEvent没有setResponse()方法。

我该怎么做handle()才能调用该方法?

4

1 回答 1

0

我认为这handle()是从onSecuritySwitchUser(). 但我可能是错的。

更新

您可以使用自己的请求覆盖事件 :)

看着:

Symfony\Component\Security\Http\Firewall\SwitchUserListener

然后用覆盖的请求调度新的 SwitchUserEvent

if (null !== $this->dispatcher) {
        $switchEvent = new SwitchUserEvent($request, $token->getUser());
        $this->dispatcher->dispatch(SecurityEvents::SWITCH_USER, $switchEvent);
}

也许这会对你有所帮助。

于 2012-09-17T07:52:02.440 回答