【问题标题】:Symfony 2 controller test can't pass Authorization headerSymfony 2 控制器测试无法通过授权标头
【发布时间】:2014-02-10 18:23:45
【问题描述】:

我有一个用 Symfony 2 编写的 HTTP API,我正在为它编写一些功能测试。

我注意到,当我尝试发送 Authorization 标头时,当我记录收到的标头时,控制器没有收到它。

在测试控制器中:

$client = self::createClient();
$client->insulate();

$headers = array(
    'Authorization' => "Bearer {$accessToken}",
    'CONTENT_TYPE' => 'application/json',
);

$client->request('DELETE', "/auth", array(), array(), $headers );

在被测控制器中:

print_r( $request->headers );

输出:

Symfony\Component\HttpFoundation\HeaderBag Object
(
    [headers:protected] => Array
        (
            [host] => Array
                (
                    [0] => localhost
                )

            [user-agent] => Array
                (
                    [0] => Symfony2 BrowserKit
                )

            [accept] => Array
                (
                    [0] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                )

            [accept-language] => Array
                (
                    [0] => en-us,en;q=0.5
                )

            [accept-charset] => Array
                (
                    [0] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
                )

            [content-type] => Array
                (
                    [0] => application/json
                )

            [x-php-ob-level] => Array
                (
                    [0] => 0
                )

        )

    [cacheControl:protected] => Array
        (
        )

)

如何传入Authorization 标头?

【问题讨论】:

    标签: symfony functional-testing


    【解决方案1】:

    对于 Symfony 2,您似乎需要使用 $_SERVER 文档 [1] 中概述的标头。

    这在文档中不是很清楚,但就我而言,我必须执行以下操作:

    $headers = array(
        'HTTP_AUTHORIZATION' => "Bearer {$accessToken}",
        'CONTENT_TYPE' => 'application/json',
    );
    
    $client->request('DELETE', "/auth", array(), array(), $headers );
    

    请注意问题中使用的 HTTP_AUTHORIZATIONAuthorization 标头。这为我解决了这个问题。

    [1]http://www.php.net/manual/en/reserved.variables.server.php

    【讨论】:

    • 这对我有用,现在有人知道如何通过测试客户端发送自定义标头吗?我的应用程序正在发送一个 API 密钥,但它没有转发。
    • 您在负载均衡器或其他反向代理后面吗?
    • 也适用于 Symfony 4
    • 也适用于 Symfony 5
    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多