举例来说,我向 Controller 中当前已通过身份验证的用户授予了新角色,如下所示:

$em = $this->getDoctrine()->getManager();
$loggedInUser = $this->get('security.context')->getToken()->getUser();
$loggedInUser->addRole('ROLE_XYZ');

$em->persist($loggedInUser);
$em->flush();

在下一页加载中,当我再次捕获经过身份验证的用户时:
$loggedInUser = $this->get('security.context')->getToken()->getUser();

他们没有被授予角色。我猜这是因为用户存储在 session 中,需要刷新。

我该怎么做呢?

如果这有所作为,我正在使用FOSUserBundle。

最佳答案

试试这个:

$em = $this->getDoctrine()->getManager();
$loggedInUser = $this->get('security.context')->getToken()->getUser();
$loggedInUser->addRole('ROLE_XYZ');

$em->persist($loggedInUser);
$em->flush();

$token = new \Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken(
  $loggedInUser,
  null,
  'main',
  $loggedInUser->getRoles()
);

$this->container->get('security.context')->setToken($token);

关于php - Symfony:如何从数据库刷新经过身份验证的用户?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19713802/

10-09 20:53