it-swarm.com.ru

Laravel получить запрос заголовков

Я использую POSTMAN для отправки запроса GET в API с заголовком, содержащим авторизацию.

Я знаю, что заголовок данных работает, потому что, если это не так, маршрут возвращает ошибку 401. 

Я хотел получить заголовок авторизации следующим образом:

$access_token = Request::header('Authorization');

Но заметил, что возвращается NULL.

Поэтому я попытался поймать значения с помощью:

die(var_dump(Request::header()));

И заметил, что он не содержит заголовка авторизации. Просто хост для заголовков файлов cookie.


Обновление

Должен получить Authorization: Bearer ACCESS TOKEN

25
majidarif

Какую версию POSTMAN вы использовали?

Находитесь ли вы на своем локальном компьютере или на управляемом сервере, некоторые хостинговые компании не разрешают HEADORIZATION HEADER.

.htaccess модификация

 RewriteEngine On
 RewriteCond %{HTTP:Authorization} .
 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
46
dschniepp

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

  1. Проверьте, доступен ли mod_rewrite и активирован ли он.
  2. Обновите .htaccess файл Laravel, расположенный в общей папке.

В первом пункте вы должны проверить, доступен ли модуль "mod_rewrite" через функцию php_info, в отдельном файле php. Затем, если он доступен, вы должны активировать его, что зависит от конфигурации вашего веб-сервера, в моем окне Nitrous я добавил эти строки в мой файл httpd.conf:

<IfModule mod_rewrite>
   RewriteEngine On
</IfModule>

Или вы можете активировать модуль в файле .htaccess тоже:

RewriteEngine On

Затем в том же файле .htaccess, который находится в общей папке в корне приложения laravel, вы должны добавить следующие строки:

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

Эти строки работали для меня. Ваш файл .htaccess должен выглядеть так:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

И все, у вас должен быть заголовок Authorization в массиве Request :: header (). Просто чтобы прояснить это, проблема с Apache, а не с самим Laravel.

8
daver

В Laravel 5.5 вы можете читать скотоводов, используя Apache_request_headers, просто читая его в вашем контроллере, используя следующие строки

$headers = Apache_request_headers();
dd($headers['Authorization']);

Убедитесь, что вы добавили use Illuminate\Http\Request; в вашем контроллере

2
sunshine

Размещать это здесь, так как это решило мою проблему. Это относится к поддоменам, но, очевидно, может быть отрегулировано и для простых доменов. Применил это в моем файле маршрутов вверху.

$newUrl = '';
try{
    $urlParts = parse_url($_SERVER['HTTP_REFERER']) ?? '';
    $newUrl = $urlParts['scheme'] . "://" . $urlParts['Host'];
    if(!stristr($newUrl, '.yourdomain.com')){
        $newUrl = 'false';
    }
}catch(Exception $e)
{}
header('Access-Control-Allow-Origin: ' . $newUrl);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: access-control-allow-Origin,cache-control,content-type,postman-token');
0
Brandon Korenek