首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >切换用户时未调用身份验证处理程序

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

Stack Overflow用户
提问于 2012-07-13 07:18:04
回答 1查看 2.6K关注 0票数 3

我在我的应用程序中有一个基本的表单登录身份验证,我使用AuthenticationHandlerInterface设置了一个处理程序,在该处理程序中,我将在onAuthenticationSuccess()方法中设置会话vars。

问题是,当我切换到另一个用户(使用ROLE_ALLOWED_TO_SWITCH)时,不再调用我的处理程序,而我之前设置的会话在切换之前仍然是用户的会话。

例子:

  • 使用用户X登录
  • 将session var myVar设置为X->someAttribute (在身份验证处理程序中)
  • 切换到用户Y
  • 未调用的处理程序: myVar保持相同的值

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

谢谢

编辑: security.yml摘录

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-13 07:46:47

当安全组件成功切换当前用户时,它将使用以下事件类分派事件security.switch_userhttps://github.com/symfony/symfony/blob/2.0/src/Symfony/Component/Security/Http/Event/SwitchUserEvent.php

因此,您可能需要/希望侦听此事件,并在调用侦听器时执行您的逻辑操作。

要收听此事件,请阅读侦听器:listener.html上的symfony食谱条目。

代码语言:javascript
运行
复制
services:
    rocky.balboa.listener.security_switch_user:
        class: Rocky\BalboaBundle\Listener\SecuritySwitchUserListener
        tags:
            - { name: kernel.event_listener, event: security.switch_user, method: onSecuritySwitchUser }

代码语言:javascript
运行
复制
// 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();
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11465854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档