切换用户时未调用身份验证处理程序

问题描述:

我的应用程序中有一个基本的表单登录身份验证,并且我使用AuthenticationHandlerInterface设置了一个处理程序,其中我在onAuthenticationSuccess()方法中设置了会话变量。切换用户时未调用身份验证处理程序

问题是,当我切换到另一个用户(使用ROLE_ALLOWED_TO_SWITCH)时,我的处理程序不再被调用,并且之前设置的会话变量在切换之前保持为用户的那些变量。

实施例:myVar的保持:

  • 与用户X
  • 设置会话变种myVar的以X-> someAttribute(认证处理程序内)
  • 切换到用户Y
  • 处理程序不叫日志记录保持相同的值

(我知道myVar = X-> someAttribute不是一个好例子,因为我已经可以了从安全令牌对象访问它,但它是简化的问题)

由于

编辑:的security.yml

firewalls: 
    main: 
     pattern: ^/ 
     anonymous: ~ 
     switch_user: { role: ROLE_ADMIN, parameter: _switch } 
     form_login: 
      provider: sso 
      success_handler: authentication_handler 
      login_path: /login 
      check_path: /login_check 
     logout: 
      path: /logout 
      target: /home 
+0

您能向我们展示您的配置,例如: security.yml? – Besnik 2012-07-13 07:29:34

当安全组件成功切换当前用户提取物,它将发送一个事件security.switch_user与以下事件类别:https://github.com/symfony/symfony/blob/2.0/src/Symfony/Component/Security/Http/Event/SwitchUserEvent.php

因此,您可能需要/希望收听此事件,并在收听您的听众时执行您的逻辑。

要收听本次活动,在听众阅读symfony的菜谱条目:http://symfony.com/doc/current/cookbook/service_container/event_listener.html

services: 
    rocky.balboa.listener.security_switch_user: 
     class: Rocky\BalboaBundle\Listener\SecuritySwitchUserListener 
     tags: 
      - { name: kernel.event_listener, event: security.switch_user, method: onSecuritySwitchUser } 

// src/Rocky/BalboaBundle/Listener/SecuritySwitchUserListener.php 

namespace Rocky\BalboaBundle\Listener; 

use Symfony\Component\Security\Http\Event\SwitchUserEvent; 

class SecuritySwitchUserListener 
{ 
    public function onSecuritySwitchUser(SwitchUserEvent $event) 
    { 
     $newUser = $event->getTargetUser(); 
    } 
} 
+0

我应该如何听这个事件,你有一个示例代码吗?谢谢 – Yoot 2012-07-13 08:09:35

+0

更新我的答案,我希望这是更有帮助:) – AdrienBrault 2012-07-13 08:48:48

+0

谢谢,是的它;) – Yoot 2012-07-13 09:12:52