我的应用程序有2个安全防火墙
"管理" - 由内部员工使用
"帐户" - 由客户使用。
Previoly我在帐户防火墙下有一个操作,控制器中的操作看起来像这样。
$user = //get user somehow
$token = new UsernamePasswordToken($user, null, 'account', $user->getRoles());
$this->get('security.token_storage')->setToken($token);
通过上面的代码,我能够以"登录为"不同的用户,这是有效的,但不完全是我想要的。
但是,当我将此代码移动到管理防火墙内的操作时,它改为管理防火墙的令牌,但我仍然希望它更改帐户防火墙的令牌,这可能吗? (换句话说,我只希望管理员用户能够以不同的帐户用户身份登录)
我宁愿不分享"上下文"在防火墙之间,因为我希望有人能够同时登录管理员和帐户防火墙。
答案 0 :(得分:2)
这可能有点hacky,但手动将令牌传递给会话实现了我想要的
$token = new UsernamePasswordToken($user, null, 'account', $user->getRoles());
$this->get('session')->set('_security_account',serialize($token));
// Needed to prepend "_security_" to the firewall name to get "_security_account"
甚至不需要调用诸如
之类的行//Didnt seem to need to call either of these
$this->get('security.token_storage')->setToken($token); //Symfony 2.6+
$this->get('security.context')->setToken($token)