簡體   English   中英

Laravel 獲取請求頭

[英]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 的答案是正確的,但我也有這個問題。 你必須做兩件事:

  1. 檢查 mod_rewrite 是否可用並激活。
  2. 更新 Laravel 的 .htaccess 文件,位於 public 文件夾中。

首先,您必須在單獨的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM