Как передать токен носителя для тестирования API с помощью phpunit и Liip

это то, что я делаю

Я делаю первый звонок, чтобы получить токен

$client->request('POST', '/api/login_check', [], [],
        ['CONTENT_TYPE' => 'application/json'],
        json_encode(
            [
                "username" => $user->getUsername(),
                "password" => 'password',
            ]
        )
    );

    $response = $client->getResponse();
    return json_decode($response->getContent())->token;

затем второй, чтобы использовать его

        $client->request('GET', '/api/my_endpoint', [], [], [
            'headers' => [
                'Authorization' => $token
            ]
        ]);

$token является допустимым токеном (проверено с помощью почтальона), например «Bearer SUPERLONGSTRING», но я получаю сообщение об ошибке

JWT Token not found

Спасибо

Вы можете предоставить больше своего кода?

kray 08.04.2019 10:18

Это оно. я полагаю, токен должен идти где-то внутри вызова метода запроса.

user3174311 08.04.2019 10:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
2
3 333
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
 $client->request('GET', '/api/my_endpoint', [], [], [
                 'HTTP_AUTHORIZATION' => "{$token}",
                 'CONTENT_TYPE' => 'application/ld+json',
                 'HTTP_ACCEPT' => 'application/ld+json'
        ]);

Для этого вы должны использовать заголовок HTTP_AUTHORIZATION. Попробуйте приведенный выше код. Также вам не нужен вложенный массив для заголовков.

Также, поскольку мы не видим формат вашего токена, имейте в виду, что формат носителя:

Носитель (пробел) остальная часть токена.

извините @ pr1nc3, это все еще возвращает мне {"код": 401, "сообщение": "Токен JWT не найден"}

user3174311 08.04.2019 11:59

Да, мой плохой, попробуйте еще раз, исправил мой ответ.

pr1nc3 08.04.2019 12:02

Все равно не повезло. Меня перенаправляют на главную страницу API со статусом HTTP 200. Я расширил вопрос, чтобы предоставить больше контекста. Нужно ли указывать, что я ожидаю ответа в формате JSON?

user3174311 08.04.2019 12:17

О, да, вы должны, я отредактирую свой ответ, чтобы включить это. Вы можете проверить мой новый ответ.

pr1nc3 08.04.2019 12:34

Извините, еще переадресация. это тест phpunit, так что может быть какой-то вариант конфигурации? Используя почтальона, он работает, как и ожидалось.

user3174311 08.04.2019 12:43

Это должно работать для модульного теста php в symfony странно. Вы уверены, что переменная $token содержит токен? Вы присваиваете ему какое-либо значение, потому что на основе вашего кода вы этого не делаете.

pr1nc3 08.04.2019 12:52

да в Токеш что-то вроде этого: Знаменосец eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE1NTQ3MjEwMjA sImV4cCI6MTU1NDcyNDY yMSwicm9sZXMiOlsiUk9 MRV9VU0VSIl0sInVzZXJ uYW1lIjoidXNlcjEifQ. WdRRySkB-9HxgXPY3__4 ues2LHZd9DKWcZEZ1CTt nLkCvoNlfD3biUSPV3B3 bIpUHyiLpZs2e1_kw0qy rCfVrss6reEC1UzISW3A TWIlUkqq7RUALqixEAO_ E-CEUIQMDkZY9kJR6eAo W4-Ddv7s6a7UMMnFPsjY v-EZke_doQr9tMs5qhMh R9vAREsXUS7vaHuiUHiF 2X4p1xqJXi4trpzr15GA wgPKNrJNNITQksPyrEoJ sbXthqQl6m9jeiyvxwx4 lC1d3LFN9AkaRWrp2nwf UXW8D7jvmXnWBbctJZBU RiP5chrCNvxQTLnJO7TF YeTvKfBeXupImQ-5OT2O US01epiYmtqCqYW_z53D 1yHQMu5nFTv4ay5mWYKq rEejKh-3Y5ti_I5463BW zLYwKJYJ2nKvz-

user3174311 08.04.2019 12:58

Я сделал еще одно небольшое изменение, не уверенный, что это может иметь место, но попробуйте еще раз, обратите внимание на двойные кавычки.

pr1nc3 08.04.2019 13:01

поэтому похоже, что нам нужно добавить 'HTTP_AUTHORIZATION' => $token, 'CONTENT_TYPE' => 'application/ld+json', 'HTTP_ACCEPT' => 'application/ld+json', если вы обновите ответ, я приму Это.

user3174311 08.04.2019 18:57

Привет, у меня точно такая же проблема, за исключением того, что это решение не работает... У меня все еще сумасшедшее поведение... У меня всегда есть "token_invalid" для моего токена JWT. Но когда я отлаживаю, беру токен и тестирую с почтальоном токен, сгенерированный и проанализированный пакетом JWT, он работает. Токен на самом деле действителен, но обнаружен как недопустимый un test env... Я не знаю, что делать, я застрял на этом часами... есть подсказка?

David Vander Elst 28.01.2021 22:06
    $client->request('GET', '/api/my_endpoint', [], [], [
        'headers' => [
            'Authorization' => 'bearer '.$token
        ]
    ]);

Другие вопросы по теме