[英]Laravel get request headers
我正在使用 POSTMAN 將 GET 請求發送到帶有包含授權的標頭的 api 中。
我知道數據標頭有效,因為如果無效,路由將返回 401 錯誤。
我想像這樣獲得授權標頭:
$access_token = Request::header('Authorization');
但是注意到它返回NULL。
所以我試圖用以下方法捕捉值:
die(var_dump(Request::header()));
並注意到它不包含任何 Authorization 標頭。 只是托管到 cookie 標頭。
更新
應該得到Authorization: Bearer ACCESS TOKEN
你用的是什么郵遞員版本?
您是在本地計算機還是托管服務器上,某些托管公司不允許 AUTHORIZATION HEADER。
.htaccess 修改
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
dschniepp 的答案是正確的,但我也有這個問題。 你必須做兩件事:
首先,您必須在單獨的 php 文件中檢查“mod_rewrite”模塊是否可以通過 php_info 函數使用。 然后,如果它可用,您必須激活它,這取決於您的網絡服務器的配置,在我的 Nitrous 框中,我將這些行添加到我的 httpd.conf 文件中:
<IfModule mod_rewrite>
RewriteEngine On
</IfModule>
或者您也可以激活 .htaccess 文件中的模塊:
RewriteEngine On
然后在位於 Laravel 應用程序根目錄的公共文件夾中的同一個 .htaccess 文件中,您必須添加以下幾行:
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>
就是這樣,您應該在 Request::header() 數組中有 Authorization 標頭。 只是為了澄清這些是 Apache 的問題,而不是 Laravel 本身的問題。
在 Laravel 5.5 中,您可以使用 apache_request_headers 讀取牧羊人,只需通過以下幾行在您的控制器中讀取它
$headers = apache_request_headers();
dd($headers['Authorization']);
確保您已添加 use Illuminate\\Http\\Request; 在你的控制器中
缺少 Apache 虛擬主機的授權標頭。
除了上面的解決方案,罪魁禍首可能是因為 Apache 服務器不允許授權標頭通過虛擬主機。
要解決此問題,您必須在虛擬主機配置中添加允許 Apache 將授權標頭傳遞給 PHP 的行。 例如,對於 Ubuntu 18.04,虛擬主機在/etc/apache2/sites-available/your-site-name.conf
定義, 請參閱本教程以獲得更好的上下文。
<VirtualHost>
# ...
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
# ...
</VirtualHost>
更新虛擬主機配置后不要忘記重新啟動 Apache(再次例如 Ubuntu 18.04 sudo systemctl restart apache2
)。
這應該可以解決問題。
這是原始答案。
在這里發布它,因為它解決了我的問題。 這適用於子域,但顯然也可以針對普通域進行調整。 在頂部的路由文件中應用了這個。
$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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.