gpt4 book ai didi

symfony - 无法从测试环境中的安全上下文获取用户

转载 作者:行者123 更新时间:2023-12-02 14:29:46 25 4
gpt4 key购买 nike

我正在尝试测试一个 API 调用方法,该方法使用基本身份验证进行安全保护,并且需要从安全上下文中检索用户。

我的 config_test.yml 文件(我使用内存数据库进行测试环境):

imports:
- { resource: config_dev.yml }

doctrine:
dbal:
driver: pdo_sqlite
path: :memory:
memory: true
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true

framework:
test: ~
session: ~
profiler:
enabled: false

web_profiler:
toolbar: false
intercept_redirects: false

swiftmailer:
disable_delivery: true

我创建了一个测试,实例化客户端如下:

    $options =  array(
'environment' => 'test',
'debug' => true,
);

$this->client = static::createClient($options);

测试看起来像:

public function testProfileAction()
{
$mockUser = new User();
$mockUser->setUsername("user");
$mockUser->setEmail("user@user.com");
$mockUser->setName("User");
$mockUser->setSurname("User");
$mockUser->setPlainPassword("1234567890");
$this->em->persist($mockUser);
$this->em->flush();

$crawler = $this->client->request('GET', '/api/1/user/profile', array(), array(), array(
'PHP_AUTH_USER' => 'user',
'PHP_AUTH_PW' => '1234567890',
));
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
}

并且该方法需要从安全上下文中获取用户。

$user = $this->get('security.context')->getToken()->getUser();

但是,运行测试时我总是得到 401 而不是 200。在方法中转储 $user 变量始终为 null。

我正在使用 Symfony 2.2 和 FOSUserBundle。

提前致谢。

最佳答案

我也遇到了同样的问题。正如 @nifr 所说,您必须创建 token ,但您还必须序列化它并创建 cookie。这是我的做法。

$token = new UsernamePasswordToken($mockUser, null, $firewallName, array($role));
self::$kernel->getContainer()->get('security.context')->setToken($token);
self::$kernel->getContainer()->get('session')->set('security'.$firewallName, serialize($token));
self::$kernel->getContainer()->get('session')->save();

$cookie = new Cookie(self::$kernel->getContainer()->get('session')->getName(), self::$kernel->getContainer()->get('session')->getId());
$this->client->getCookieJar()->set($cookie);

关于symfony - 无法从测试环境中的安全上下文获取用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com