我正在尝试了解Symfony2的身份验证层(使用Symfony 2.8)。 UsernamePasswordToken
对象正在初始化:
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
对象时,我在其中放入了什么并不重要?
答案 0 :(得分:2)
当系统可能支持多种令牌时,提供程序密钥允许安全侦听器和提供程序区分不同的令牌。这主要是为了防止这些服务相互影响。