Php 如何覆盖使用Symfony 3进行测试的用户提供程序?
我有以下安全措施。yml:Php 如何覆盖使用Symfony 3进行测试的用户提供程序?,php,symfony,Php,Symfony,我有以下安全措施。yml: security: # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded providers: in_memory: memory: ~ bd_provider: entity: class: AppBundle:Usuario
security:
# http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
in_memory:
memory: ~
bd_provider:
entity:
class: AppBundle:Usuario
property: email
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
form_login:
login_path: login
check_path: login
provider: bd_provider
logout:
path: /logout
target: /login
我正在通过以下方式验证Porpus的测试:
protected function createClientWithAuthentication()
{
/* @var $client Client */
$client = static::createClient();
/* @var $user UserInterface */
$user = $client->getContainer()->get('doctrine')->getRepository('AppBundle:Usuario')->find(5);
$firewallName = 'main';
$token = new UsernamePasswordToken($user, $user->getPassword(), $firewallName, $user->getRoles());
$session = $client->getContainer()->get('session');
$session->set('_security_' . $firewallName, serialize($token));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$client->getCookieJar()->set($cookie);
return $client;
}
但是我想使用不同的提供者进行测试,比如内存。因此,我在config_test.yml中添加了以下内容
security:
providers:
em_memoria:
memory:
users:
email@example.com:
password: senha
roles: 'ROLE_SUPER_ADMIN'
encoders:
AppBundle\Entity\Usuario: plaintext
firewalls:
main:
provider: em_memoria
但是,当我更改将用户组装到以下位置的代码时:
$user = new Usuario();
$user
->setUsername('email@example.com')
->setPassword('admin')
->setRole('ROLE_USER_ADMIN');
这些测试将我发送到登录页面,就好像我使用了不正确的用户一样。我错过了什么?还有什么我该做的吗
如果需要其他信息,请告诉我,我会在这里提供
提前感谢。您可以使用别名作为用户提供程序,并在不同的环境中引用不同的服务
firewalls:
main:
provider: app.user_provider
conf.yml:
services:
app.user_provider:
alias: bd_provider
conf_test.yml:
services:
app.user_provider:
alias: em_memoria
我无法让它工作,所以我在测试环境中将我的数据库配置为SQLite db。我还创建了一些DataFixture来加载初始数据,并在引导文件中调用了这些Fixture。提供程序的定义必须与服务的定义位于同一文件中,否则我会收到以下错误:[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]无法将别名“app.user\u provider”替换为实际定义“bd\u provider”。[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]您请求了一个不存在的服务“bd\U provider”。我在这里编辑了一些代码,并执行了以下操作:我创建了一个类TestUserProvider并实现了返回用户的自定义提供程序。当我的测试提供程序被指定为
提供程序
列表中的第一个时,它会在我的测试中成功执行,但我无法再使用bd_提供程序,即使我在主防火墙下指定了提供程序
密钥。