在我的应用程序中,我使用的是FOS用户包和Fr3d ldap包。 每次成功登录后,都会触发一个侦听器方法。此侦听器启动一项服务,该服务要求Active Directory提供有关该用户的其他信息。然后将此数据存储在安全上下文中的用户对象中。
到目前为止一切顺利。
但是,用户对象以某种方式刷新稍后添加的所有用户信息。当我想根据侦听器添加的角色对用户进行身份验证时,身份验证失败并且其他角色已经消失。
有谁知道如何在安全上下文中保留用户对象?用户提供程序的刷新功能似乎没有任何影响。
我的登录监听器的一些代码:
# get user
$sc = $this->container->get('security.context');
$user = $sc->getToken()->getUser();
if (!is_object($user)) exit('not logged in!');
# enrich user object
$ldaps = $this->container->get('ldapService');
$user = $ldaps->enrichUser($user);
# refresh security context (otherwise new user data will not be used and auth mostly fails)
$token = new \Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken
(
$user,
null,
'main',
$user->getRoles()
);
$sc->setToken($token);
$userManager = $this->container->get('fr3d_ldap.security.user.provider');
$userManager->refreshUser($user);
当我使用这一行在我的监听器结束时进行测试时,似乎所有添加的数据确实存在于安全上下文中:
var_dump($sc->getToken->getUser()); exit('onSuccesfulLogin');
但是,在下一个控制器操作(或页面,如果你愿意)加载时,我再次面对原始用户对象而没有添加所有数据。问题:没有持久性......:)
修改 我想我的问题可以改为:你如何以及在哪里存储有关成功登录用户的额外数据(例如:他们的电话号码),来自各种数据源,供临时使用?