为不同的防火墙手动设置Auth Token

时间:2015-06-14 23:06:56

标签: symfony

我的应用程序有2个安全防火墙

"管理" - 由内部员工使用

"帐户" - 由客户使用。

Previoly我在帐户防火墙下有一个操作,控制器中的操作看起来像这样。

$user = //get user somehow
$token = new UsernamePasswordToken($user, null, 'account', $user->getRoles());
$this->get('security.token_storage')->setToken($token);

通过上面的代码,我能够以"登录为"不同的用户,这是有效的,但不完全是我想要的。

但是,当我将此代码移动到管理防火墙内的操作时,它改为管理防火墙的令牌,但我仍然希望它更改帐户防火墙的令牌,这可能吗? (换句话说,我只希望管理员用户能够以不同的帐户用户身份登录)

我宁愿不分享"上下文"在防火墙之间,因为我希望有人能够同时登录管理员和帐户防火墙。

1 个答案:

答案 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)