Как выполнить проверку действий контроллера CakePHP 3.x, для которых требуется базовая аутентификация HTTP?
Я пытаюсь аутентифицировать пользователя, добавив PHP_AUTH_USER
и PHP_AUTH_PW
в переменную $_ENV
, но это не влияет. Я использую следующую конфигурацию с memory
-хранилищем:
$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
...
$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
],
];
К сожалению, запрос по-прежнему блокируется.
1 answers
Интеграционные тестовые случаи никогда не должны иметь дело с суперглобальными, так как они обычно не затрагиваются тестовым случаем, чтобы избежать загрязнения тестовой среды данными, не связанными с запросом CakePHP.
Тестовый запрос может быть настроен с помощью метода \Cake\TestSuite\IntegrationTestCase::configRequest()
. Он принимает массив, который в основном будет просто передан конструктору \Cake\Network\Request
объекта запроса, используемого тестом.
Короче говоря, переменные среды могут быть определены с помощью ключа конфигурации environment
, как
public function testIndex()
{
$this->configRequest([
'environment' => [
'PHP_AUTH_USER' => 'ApiUser',
'PHP_AUTH_PW' => '123456'
]
]);
$this->get('/index');
$this->assertResponseOk();
}
См. также