我有以下security.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
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
我正在通过这种方式验证测试porpuses:
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;
}
但我想使用不同的提供程序进行测试,例如in_memory。所以我在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');
测试将我发送到登录页面,就像我使用的是不正确的用户一样。我在这里错过了什么?还有什么我应该做的吗?
如果有任何其他信息是必要的,请告诉我,我会在这里提供。
提前致谢。
答案 0 :(得分:0)
您可以将别名用作用户提供程序,并在不同环境中引用不同的服务。
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
答案 1 :(得分:0)
我无法使其工作,因此我将测试环境中的数据库配置为SQLite数据库。我还创建了一些DataFixtures来加载初始数据,并在我的bootstrap文件中调用了theese fixtures。