【问题标题】:Symfony2: Unable to simulate HTTP authentication in functional testSymfony2:无法在功能测试中模拟 HTTP 身份验证
【发布时间】:2012-01-27 13:52:22
【问题描述】:

我正在尝试使用 symfony.com 上描述的以下技术:http://symfony.com/doc/current/cookbook/testing/http_authentication.html 尝试对需要用户登录的控制器进行功能测试。

到目前为止,我的登录表单正在运行,我可以登录,并且 Symfony2 调试 Web 工具栏显示我的用户已通过身份验证。另外,我已经为登录过程本身编写了一个功能测试,这通过了。所以我现在通过两种情况,我的登录正在工作。

我遇到的唯一问题是,在尝试为其他控制器模拟 HTTP 身份验证时:

$client = static::createClient(array(), array(
    'PHP_AUTH_USER' => 'tester',
    'PHP_AUTH_PW'   => 'testpass',
));

我可以通过检查 $client 看到,当我尝试这样的事情时,我被重定向到我的登录页面:

$crawler = $client->request('GET', '/');

我知道数据库中存在密码为 testpass 的用户 tester,因为我也可以通过浏览器使用该帐户登录。

我可以使用安全控制器测试中的以下代码:

    $client = $this->createClient(array(), array('HTTP_HOST' => 'myapp.test'));

    // Visit user login page and login
    $crawler = $client->request('GET', '/login');
    $form = $crawler->selectButton('Login')->form();
    $crawler = $client->submit($form, array('_username' => 'tester', '_password' => 'testpass'));

    // ... carry on with remainder of tests

但我不太确定这是否是最有效的方法。

我对出了什么问题感到有些震惊。有任何想法吗?是否对 Symfony2 进行了更改,这意味着此过程已更改并且 HTTP 身份验证模拟现在不起作用或工作方式不同?

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    考虑一下,我可能只是使用以下setUp方法进行登录:

    public function setUp()
    {
        // Perform user login.
        $this->client = $this->createClient(array(), array('HTTP_HOST' => 'scire.test'));
        $crawler = $this->client->request('GET', '/login');
        $form = $crawler->selectButton('Login')->form();
        $this->client->submit($form, array('_username' => 'tester', '_password' => 'tester'));
    }
    

    HTTP 身份验证在这里不起作用,除非我通过一些安全设置更改我的 config_test.yml 以允许 HTTP 身份验证。

    自我注意:HTTP 身份验证与使用 Doctrine 用户提供程序不同!!!

    【讨论】:

    • 我遇到了完全相同的问题。我已经设法使用您的方法登录了,但是每次我尝试访问另一个页面时,我都必须再次登录,这最终使我陷入了循环。
    【解决方案2】:

    这样发送您的请求:

    <?php
    $client->request(
        'GET',
        '/',
        array(),
        array(),
        array('PHP_AUTH_USER' => 'username', 'PHP_AUTH_PW' => 'pa$$word')
    );
    

    这实际上将信息作为真正的身份验证头信息发送。

    【讨论】:

      猜你喜欢
      • 2012-01-30
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多