Symfony 4.2:防火墙配置不加载内存用户提供程序
Symfony 4.2: Firewall configuration doesn't load memory user provider
对于我的 test
环境,我配置了一个基于内存的用户提供程序:
config/packages/test/security.yaml
security:
providers:
unit_testing:
memory:
users:
test1: { password: $testpwd1, roles: ['ROLE_SUPER_ADMIN'] }
test2: { password: $testpwd2, roles: ['ROLE_SPECIAL1_ADMIN'] }
test3: { password: $testpwd3, roles: ['ROLE_SPECIAL2_ADMIN'] }
firewalls:
admin:
form_login:
provider: unit_testing
我尝试在功能测试中测试登录表单。
tests/Controller/LoginControllerTest.php
$client = static::createClient();
$crawler = $client->request(Request::METHOD_GET, '/login');
$form = $crawler->selectButton('Login')->form(['_username' => 'test1', '_password' => '$testPwd1']);
$client->submit($form);
登录失败。调试登录过程表明,虽然 Kernel.php
从 test
加载额外的安全配置,但 FirewallListener
获取具有 provider = null
.
的配置
标准环境下,生产数据登录成功
这是怎么回事?
如果需要,我会提供额外的代码。
我进一步隔离了问题,并悲哀地意识到我的问题实际上不是用户提供者。
为内存提供程序配置的密码使用旧编码,因此较新的编码算法生成的哈希和不匹配。原因之一可能是从 3.4 迁移到 4.2,因为配置有很多更改。
通过php bin/console security:encode-password <arg>
手动编码目标密码解决了我的问题。
对于我的 test
环境,我配置了一个基于内存的用户提供程序:
config/packages/test/security.yaml
security:
providers:
unit_testing:
memory:
users:
test1: { password: $testpwd1, roles: ['ROLE_SUPER_ADMIN'] }
test2: { password: $testpwd2, roles: ['ROLE_SPECIAL1_ADMIN'] }
test3: { password: $testpwd3, roles: ['ROLE_SPECIAL2_ADMIN'] }
firewalls:
admin:
form_login:
provider: unit_testing
我尝试在功能测试中测试登录表单。
tests/Controller/LoginControllerTest.php
$client = static::createClient();
$crawler = $client->request(Request::METHOD_GET, '/login');
$form = $crawler->selectButton('Login')->form(['_username' => 'test1', '_password' => '$testPwd1']);
$client->submit($form);
登录失败。调试登录过程表明,虽然 Kernel.php
从 test
加载额外的安全配置,但 FirewallListener
获取具有 provider = null
.
标准环境下,生产数据登录成功
这是怎么回事?
如果需要,我会提供额外的代码。
我进一步隔离了问题,并悲哀地意识到我的问题实际上不是用户提供者。
为内存提供程序配置的密码使用旧编码,因此较新的编码算法生成的哈希和不匹配。原因之一可能是从 3.4 迁移到 4.2,因为配置有很多更改。
通过php bin/console security:encode-password <arg>
手动编码目标密码解决了我的问题。