Symfony 2.1.7 - 用户通过身份验证后更新安全令牌设置特定角色
Posted
技术标签:
【中文标题】Symfony 2.1.7 - 用户通过身份验证后更新安全令牌设置特定角色【英文标题】:Symfony 2.1.7 - Update security token setting specific roles after the user is authenticated 【发布时间】:2013-02-11 14:31:23 【问题描述】:我想在 loginSuccess 发生后根据取决于用户行为的参数为用户设置一些角色。
我看了看,角色似乎存储在可通过容器访问的 security.content.token 中:
$this->container->get('security.context')->getToken()
我可以看到角色存储在这个令牌中(在我的例子中是来自FOSFacebookBundle
的FacebookUserToken
)
我的另一个要求是我不能设置Roles
并注销用户,它必须在同一个会话中。
这可能吗?
【问题讨论】:
【参考方案1】:我发现了这个问题:Get security token for non-logged user with Symfony
这有助于我认为我可以设置一个新的安全令牌(而不是尝试更新现有安全令牌中的角色)。我的用户的角色没有存储在 User 表中,所以它是有意义的。
public function strangeAction()
// Get your User, however you normally get it
$user = $userRepository->find($id);
// Save the original token in the session (just in case I need to reverse it)
$originalToken = $this->get("security.context")->getToken();
$this->getRequest()->getSession()->set('original.security.token', $originalToken);
// Create my new custom token (loading the roles of the user)
$token = new UsernamePasswordToken($user, null, "main", $user->getRolesMagically());
// Update the security context with the new token
$this->get("security.context")->setToken($token);
// Now you have access to isGranted()
if ($this->get("security.context")->isGranted("ROLE_SOMETHING"))
我对这个解决方案充满信心,但如果可能的话,我希望能提供更多意见。
即。为什么我不能这样做?
【讨论】:
以上是关于Symfony 2.1.7 - 用户通过身份验证后更新安全令牌设置特定角色的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 身份验证器未正确验证身份验证器在重定向后不会保留用户
通过使用 Symfony2 的 API 使用用户密码进行身份验证