3

使用 Symfony2 我想security.content在登录后使用登录后获得的信息来扩充用户。

因此,在登录成功代码中,我执行以下操作AccountController

$user = $this->get('security.context')->getToken()->getUser();

// Get everything we'll ever need for this user
$user->fillDetails($this, $this->container);

$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());

// Give it to the security context
$this->container->get('security.context')->setToken($token);

return $this->redirect($this->generateUrl('AccountBundle_homepage'));

如果我在调用此信息后立即再次检索用户setToken(),则在 User 对象中设置的信息fillDetails()仍然存在。

AccountBundle_homepage但是在我让用户使用时的控制器操作中

$user = $this->get('security.context')->getToken()->getUser();

我设置的额外信息fillDetails()不再存在,或者0

任何帮助表示赞赏。

4

1 回答 1

2

安全上下文会在每个请求上创建一个令牌,这意味着您不能修改令牌、重定向用户并期望在前一个令牌上获取数据集。如果你不坚持你的用户,它就行不通。用户也会在每个请求上重新加载。

您可以在此处找到有关令牌的更多信息:http: //symfony.com/doc/current/cookbook/security/custom_authentication_provider.html#the-token

于 2012-08-23T15:35:23.270 回答