Slimframework request-> заголовки не читаются Авторизация
Я пытаюсь реализовать простую авторизацию с slim на serveride и angularJS на стороне клиента. Для тестирования REST APi i'm с помощью программы под названием Rested для Mac, которая позволяет отправлять вызовы отдыха.
Я хочу доставить, как только авторизация завершится, при каждом отдыхе вызовите токен jwt, который может быть использован в slim для авторизации запросов для определенных путей.
Теперь я передаю через Rested следующий заголовок и тело:
Accept: */*
Accept-Encoding: gzip, deflate
Content-Type: application/json
Authorization: jwt-test
Accept-Language: de-de
{
"login": "TestLogin",
"password": "TestPassword",
"uuid": "dsfglj45690dfgkl456"
}
И чем просто распечатать весь заголовок:
Slim\Http\Headers Object ( [data:protected] => Array ( [Host] => localhost:8888
[Content-Type] => application/json [Content-Length] => 89 [Connection]
=> keep-alive [Accept] => */* [User-Agent] => Rested/2009 CFNetwork/673.4
Darwin/13.4.0 (x86_64) (iMac13%2C2) [Accept-Language] => de-de [Accept-Encoding]
=> gzip, deflate ) )
Как вы можете видеть, в этом массиве нет авторизации.
Я также проверил это с помощью firefox напрямую, те же результаты. O может видеть строку авторизации в заголовках запроса с firebug, но она не находится в сбрасываемом массиве в slimframework.
Есть ли у кого-нибудь подсказка, где моя проблема?
Спасибо заранее и любезны.
solick
Ответы
Ответ 1
Проблема
Базовый заголовок проверки подлинности должен выглядеть примерно так.
Authorization: Basic cm9vdDp0MDBy
Строка после Basic создается путем объединения имени пользователя и пароля в строку типа username:password
. Последовательная строка затем кодируется с использованием base64.
Вы отправляете заголовок на веб-сервер, который PHP не будет анализировать. Не уверен, что это считается ошибкой или функцией.
Authorization: jwt-test
Решение
С текущей версией Slim, если вы добавили следующее в файл .htaccess.
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Затем вы можете получить доступ к даже нестандартному заголовку с любым из них.
var_dump($_SERVER["HTTP_AUTHORIZATION"]);
var_dump(apache_request_headers()["Authorization"]);
var_dump($app->request->headers("Authorization"));
Он дает следующий результат:
string 'jwt-test' (length=8)
string 'jwt-test' (length=8)
string 'jwt-test' (length=8)
Вы также можете использовать другое имя заголовка, например X-Authorization
.
Ответ 2
Поскольку я тоже с этим боролся, вот что я нашел, как описано здесь в документации Slim, без необходимости что-либо добавлять в файл .htaccess
$request->getHeader("Authorization");