Symfony2中已修改的用户对象的身份验证失败

时间:2013-03-04 13:39:03

标签: security authentication symfony user-controls persistence

在我的应用程序中,我使用的是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');

但是,在下一个控制器操作(或页面,如果你愿意)加载时,我再次面对原始用户对象而没有添加所有数据。问题:没有持久性......:)

修改 我想我的问题可以改为:你如何以及在哪里存储有关成功登录用户的额外数据(例如:他们的电话号码),来自各种数据源,供临时使用?

0 个答案:

没有答案