Php Symfony2:UsernamePasswordToken中的$providerKey实际上做什么?

Php Symfony2:UsernamePasswordToken中的$providerKey实际上做什么?,php,symfony,authentication,Php,Symfony,Authentication,我试图理解Symfony2的身份验证层(使用Symfony2.8)用户名密码令牌对象正在初始化为: public function __construct($user, $credentials, $providerKey, array $roles = array()) 根据一些教程,我在注册控制器中创建了一个方法,用于在提交注册表单后自动验证用户 private function authenticateUser(User $user) { $providerKey = 'defa

我试图理解Symfony2的身份验证层(使用Symfony2.8)<代码>用户名密码令牌对象正在初始化为:

public function __construct($user, $credentials, $providerKey, array $roles = array())
根据一些教程,我在注册控制器中创建了一个方法,用于在提交注册表单后自动验证用户

private function authenticateUser(User $user)
{
    $providerKey = 'default'; // your firewall name
    $token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
    $this->container->get('security.token_storage')->setToken($token);
}
它是有效的,事情是。。。我不知道它为什么起作用(这是最糟糕的感觉)。我不知道为什么会这样,因为有人说,
$providerKey
应该与防火墙匹配,但我可以在里面放任何我想要的东西,它仍然可以工作。为什么呢

代码扫描告诉我,它只在AuthenticationProviderInterface的实现中使用,但很难再深入下去了


所以。。。
$providerKey
的真正用途是什么?为什么在创建用于用户身份验证的
UsernamePasswordToken
对象时,我在其中输入的内容无关紧要?

当系统可能支持多种令牌时,提供程序密钥允许安全侦听器和提供程序区分不同的令牌。这主要是为了防止这些服务互相妨碍

当从不同的提供者获得不同的令牌时,您能举一个例子吗?在我们的应用程序中,我们有两个防火墙,每个防火墙都有不同的提供者密钥。例如,在PHP会话名称中使用提供者密钥来区分用户可能拥有的两个会话令牌。这是电子商务网站的一个很好的例子,用户可以作为员工登录,也可以作为客户端(不同的防火墙)登录,通过提供者密钥您可以知道他登录的位置?是的,这就是一个例子。主要是如果您需要不同的登录/注销URL,那么您需要它。尽管可能还有其他方法可以跟踪用户登录的位置。