gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:00:26 25 4
gpt4 key购买 nike

我的应用程序中有一个基本的表单登录身份验证,我使用 AuthenticationHandlerInterface 设置了一个处理程序,我在其中的 onAuthenticationSuccess() 方法中设置了 session 变量。

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

示例:

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

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

谢谢

编辑: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

最佳答案

当安全组件成功切换当前用户时,它会派发一个事件security.switch_user,事件类如下:https://github.com/symfony/symfony/blob/2.0/src/Symfony/Component/Security/Http/Event/SwitchUserEvent.php .

因此您可能需要/想要监听此事件,并在调用监听器时执行您的逻辑。

要收听此事件,请阅读关于收听者的 symfony cookbook 条目: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();
}
}

关于切换用户时未调用身份验证处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11465854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com