我正在使用fosUserBundle设置站点 . 我需要编写一些单元测试,但我似乎无法使身份验证正常工作以与它们一起使用 . 我已经尝试了一些没有运气的方法 .
approach1 - 安全设置中的链提供商,以进行我可以依赖的标准登录 . 当我这样做时,唯一有效的身份验证是in_memory提供程序,这意味着我可以使用admin用户登录,但不能使用fosUserBundle创建的任何用户登录
security.yml
security:
encoders:
"FOS\UserBundle\Model\UserInterface": plaintext
"Symfony\Component\Security\Core\User\User": plaintext
providers:
chain_provider:
providers: [in_memory, fos_userbundle]
in_memory:
users:
admin: { password: admin, roles: [ 'ROLE_ADMIN' ] }
fos_userbundle:
id: fos_user.user_manager
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: /
csrf_provider: form.csrf_provider
default_target_path: /media
logout: true
anonymous: true
http_basic:
provider: in_memory
方法2-我在单元测试的设置中创建了一个用户 . 但是使用这种方法我永远无法使用我刚刚创建的用户登录,我不需要用户确认 .
public function setUp() {
$kernel = static::createKernel();
$this->repo = $kernel->boot();
$this->repo = $kernel->getContainer();
$userManager = $this->repo->get('fos_user.user_manager');
$email = "testing".(string) self::newRandomNumber()."@test.com";
$un = "test".(string) self::newRandomNumber();
$fn = "testin";
$ln = "laster";
$pwd = "passworD1";
$user = $userManager->createUser();
$user->setEmail($email);
$user->setUsername($un);
$user->setFirstName($fn);
$user->setLastName($ln);
$user->setPlainPassword($pwd);
$user->setBimStaff(True);
// Persist the user to the database
$userManager->updateUser($user);
$this->user = $user;
$this->client = static::createClient();
$crawler = $this->client->request('GET', '/');
$form = $crawler->selectButton('Login')->form();
// set some values
$un = 'Lucas'.self::newRandomNumber();
$form['_username'] = $un;
$form['_password'] = $pwd;
// submit the form
$crawler = $this->client->submit($form);
print_r($this->client->getResponse());
$this->client->followRedirects();
}
我已尝试登录表单和http基本身份验证,但似乎都不起作用 .
有人有什么建议吗?
谢谢,科里
2 回答
嗯,似乎如果你在安全性中链接提供者,你不能只使用其中一个提供者,至少为我解决了这个问题 .
一旦我将两个供应商都改为
chain_provider
它就开始合作了 .我的单元测试现在看起来像这样
如果复制这个我会建议你的用户使用更强的密码:)
我有同样的问题,但我希望选项2能够工作 . 你的榜样几乎就在那里并帮助了我 . 我认为它没有启用't working for you is that the user wasn't的原因 . FOSUserBundle中的用户构造函数默认会创建禁用的用户,因此您必须调用
$user->setEnable(true)
这是我的工作示例