【问题标题】:Symfony Deprecation on SessionTokenStorage when generating a csrf token in phpunit functionnal tests在 phpunit 功能测试中生成 csrf 令牌时,Symfony 弃用 SessionTokenStorage
【发布时间】:2022-01-11 15:35:49
【问题描述】:

我正在使用 symfony 5.4

我不明白 symfony 真正需要什么来纠正这种弃用:

从 symfony/security-csrf 5.3 开始:在没有会话的情况下使用“Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage”没有任何效果并且已被弃用。它将在 Symfony 6.0 中抛出“Symfony\Component\HttpFoundation\Exception\SessionNotFoundException” 1x 在 MeansCablesControllerTest::TestDatagridAdd 从 App\Tests\Controller

我在 tests/Controller/MeansBenchesControllerTest.php (WebTestCase) 中的函数:

function datagridAddUpdate($controllerName, $dataArray)
    {
        $client = static::createClient();
        
        $usersRepository = static::getContainer()->get(UsersRepository::class);
        $testUserAdmin = $usersRepository->find(1);
        
        $client->loginUser($testUserAdmin);

        $csrfToken = $client->getContainer()->get('security.csrf.token_manager')->getToken($controllerName.'Token_item');

        $dataArray['_token'] = $csrfToken;

        $crawler = $client->request('POST', '/datagridAddUpdate/'.$controllerName,$dataArray, [], ['HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest']);

        $this->assertResponseIsSuccessful('Status code 2xx pour datagridAdd : '.$controllerName);

    }

【问题讨论】:

  • 通过GET 请求页面并使用Crawler's form() function 也可以获得令牌并绕过弃用,无需在场边生成它。
  • 是的,它可以是一个解决方案,但它不能完全回答这个问题。不了解 symofny 需要什么以及如何实现它可能很有趣;)
  • 这是我在过渡期间必须选择的解决方案,因为据我所知,没有“官方”替代品。现在访问会话需要RequestStack,但我认为这在这种情况下不起作用,因为直到......你知道......请求页面之前没有请求。在github 中有a couplerelated discussions,但到目前为止还没有(合并的)替代方案。因此,如果您发布并在找到一个时回答,我将不胜感激。
  • 作为一个临时解决方案,我只在测试环境中创建了一个路由,该路由返回带有给定字符串的令牌值,因此我可以在我的测试中使用它,而无需从表单中获取令牌。这对于 ajax 路由测试也很有用。

标签: php symfony phpunit


【解决方案1】:

在构建表单之前运行它会确保有一个可用的会话:

$request = new Request();
$request->setSession(new Session(new MockArraySessionStorage()));

self::getContainer()->get(RequestStack::class)->push($request);

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 2014-08-20
    • 2021-02-24
    • 2011-01-19
    • 2017-09-21
    • 2010-12-20
    • 2015-09-16
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多