我正在使用 fosUserBundle 建立一个站点。我需要编写一些单元测试,但我似乎无法让身份验证正常工作以与它们一起使用。我已经尝试了一些没有运气的方法。
方法 1 - 安全设置中的链提供程序以进行我可以依赖的标准登录。当我这样做时,唯一有效的身份验证是 in_memory 提供程序,这意味着我可以使用管理员用户登录,但不能使用 fosUserBundle 创建的任何用户
安全.yml
安全:
编码器:
“FOS\UserBundle\Model\UserInterface”:明文
“Symfony\Component\Security\Core\User\User”:纯文本
提供者:
链提供者:
提供者:[in_memory,fos_userbundle]
在记忆中:
用户:
管理员:{密码:管理员,角色:['ROLE_ADMIN']}
fos_userbundle:
id:fos_user.user_manager
防火墙:
主要的:
模式:^/
表单登录:
提供者:fos_userbundle
登录路径:/
csrf_provider:form.csrf_provider
default_target_path:/媒体
注销:真
匿名:真实
http_basic:
提供者: in_memory
方法 2- 我在单元测试的设置中创建了一个用户。但是使用这种方法,我永远无法使用我刚刚创建的用户登录,我不需要用户确认。
公共功能设置(){
$kernel = 静态::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 = "测试";
$ln = "激光";
$pwd = "密码1";
$user = $userManager->createUser();
$user->setEmail($email);
$user->setUsername($un);
$user->setFirstName($fn);
$user->setLastName($ln);
$user->setPlainPassword($pwd);
$user->setBimStaff(True);
// 将用户持久化到数据库
$userManager->updateUser($user);
$this->user = $user;
$this->client = static::createClient();
$crawler = $this->client->request('GET', '/');
$form = $crawler->selectButton('登录')->form();
// 设置一些值
$un = 'Lucas'.self::newRandomNumber();
$form['_username'] = $un;
$form['_password'] = $pwd;
// 提交表单
$crawler = $this->client->submit($form);
print_r($this->client->getResponse());
$this->client->followRedirects();
}
我已经尝试过以表单和 http 基本身份验证登录,但似乎都不起作用。
有人有什么建议吗?
谢谢,科里