2

PHP_AUTH_USER我正在尝试通过将and添加PHP_AUTH_PW到-Variable 来对用户进行身份验证$_ENV,但这没有影响。我将以下配置与memory-Storage 一起使用:

$this->loadComponent('Auth', [
        'authenticate' => [
            'Basic' => [
                'fields' => ['username' => 'username', 'password' => 'password'],
                'userModel' => 'CmUsers'
            ],
        ],
        'storage' => 'Memory',
        'unauthorizedRedirect' => false
]);  

测试失败,出现exception 'Cake\Network\Exception\UnauthorizedException' with message 'Unauthorized'.

public function testIndex()
{         
    $_ENV['PHP_AUTH_USER'] = 'ApiUser';  
    $_ENV['PHP_AUTH_PW'] = '123456';   

    $this->get('/index');                

    $this->assertResponseOk();                         
}

有谁知道如何将身份验证数据添加到请求中?

如果我遵循@ndm 的建议并添加Authentication-Header ...

$this->configRequest([
            'environment' => [
                'PHP_AUTH_USER' => 'ApiUser',
                'PHP_AUTH_PW' => '123456',                  
            ],
            'headers' => ['Authorization' => 'Basic ApiUser:123456']
]); 

...环境变量如下所示:

[_environment:protected] => Array
    (
        [HTTP_AUTHORIZATION] => Basic ApiUser:123456
        [REQUEST_METHOD] => GET
        [PHP_AUTH_USER] => ApiUser
        [PHP_AUTH_PW] => 123456
        [HTTP_X_HTTP_METHOD_OVERRIDE] => 
        [ORIGINAL_REQUEST_METHOD] => GET
        [SERVER_PORT] => 
        [HTTPS] => 
        [HTTP_HOST] => 
    )

我的夹具看起来像这样:

public $records = [
    [
        'id' => 2,
        'username' => 'ApiUser',
        'password' => '123456',
        'role' => 'api-user',
        'created' => 1460710056,
        'modified' => 1460710056
    ],        
];

不幸的是,请求仍然被阻止。

4

1 回答 1

2

集成测试用例不应该摆弄超全局变量,因为它们通常不会被测试用例触及,以避免与非 CakePHP 请求相关的数据污染测试环境。

可以通过该\Cake\TestSuite\IntegrationTestCase::configRequest()方法配置测试请求。它接受一个数组,该数组基本上只是传递给\Cake\Network\Request测试使用的请求对象的构造函数。

长话短说,环境变量可以通过environmentconfig 键来定义,比如

public function testIndex()
{
    $this->configRequest([
        'environment' => [
            'PHP_AUTH_USER' => 'ApiUser',
            'PHP_AUTH_PW' => '123456'
        ]
    ]);  

    $this->get('/index');                

    $this->assertResponseOk();                         
}

也可以看看

于 2016-05-19T11:34:59.597 回答