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.phptest 加载额外的安全配置,但 FirewallListener 获取具有 provider = null.

的配置

标准环境下,生产数据登录成功

这是怎么回事?

如果需要,我会提供额外的代码。

我进一步隔离了问题,并悲哀地意识到我的问题实际上不是用户提供者。

为内存提供程序配置的密码使用旧编码,因此较新的编码算法生成的哈希和不匹配。原因之一可能是从 3.4 迁移到 4.2,因为配置有很多更改。

通过php bin/console security:encode-password <arg>手动编码目标密码解决了我的问题。