это то, что я делаю
Я делаю первый звонок, чтобы получить токен
$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
Спасибо
Это оно. я полагаю, токен должен идти где-то внутри вызова метода запроса.
$client->request('GET', '/api/my_endpoint', [], [], [
'HTTP_AUTHORIZATION' => "{$token}",
'CONTENT_TYPE' => 'application/ld+json',
'HTTP_ACCEPT' => 'application/ld+json'
]);
Для этого вы должны использовать заголовок HTTP_AUTHORIZATION
. Попробуйте приведенный выше код. Также вам не нужен вложенный массив для заголовков.
Также, поскольку мы не видим формат вашего токена, имейте в виду, что формат носителя:
Носитель (пробел) остальная часть токена.
извините @ pr1nc3, это все еще возвращает мне {"код": 401, "сообщение": "Токен JWT не найден"}
Да, мой плохой, попробуйте еще раз, исправил мой ответ.
Все равно не повезло. Меня перенаправляют на главную страницу API со статусом HTTP 200. Я расширил вопрос, чтобы предоставить больше контекста. Нужно ли указывать, что я ожидаю ответа в формате JSON?
О, да, вы должны, я отредактирую свой ответ, чтобы включить это. Вы можете проверить мой новый ответ.
Извините, еще переадресация. это тест phpunit, так что может быть какой-то вариант конфигурации? Используя почтальона, он работает, как и ожидалось.
Это должно работать для модульного теста php в symfony странно. Вы уверены, что переменная $token содержит токен? Вы присваиваете ему какое-либо значение, потому что на основе вашего кода вы этого не делаете.
да в Токеш что-то вроде этого: Знаменосец 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-
Я сделал еще одно небольшое изменение, не уверенный, что это может иметь место, но попробуйте еще раз, обратите внимание на двойные кавычки.
поэтому похоже, что нам нужно добавить 'HTTP_AUTHORIZATION' => $token, 'CONTENT_TYPE' => 'application/ld+json', 'HTTP_ACCEPT' => 'application/ld+json', если вы обновите ответ, я приму Это.
Привет, у меня точно такая же проблема, за исключением того, что это решение не работает... У меня все еще сумасшедшее поведение... У меня всегда есть "token_invalid" для моего токена JWT. Но когда я отлаживаю, беру токен и тестирую с почтальоном токен, сгенерированный и проанализированный пакетом JWT, он работает. Токен на самом деле действителен, но обнаружен как недопустимый un test env... Я не знаю, что делать, я застрял на этом часами... есть подсказка?
$client->request('GET', '/api/my_endpoint', [], [], [
'headers' => [
'Authorization' => 'bearer '.$token
]
]);
Вы можете предоставить больше своего кода?