Laravel获取请求标头

时间:2013-12-31 07:28:43

标签: php laravel oauth-2.0

我正在使用POSTMAN通过包含授权的标头向api发送GET请求。

我知道数据头是有效的,因为如果它没有,则路由返回401错误。

我想获得Authorization标头,如下所示:

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

但注意到它返回NULL。

所以我试着用以下方法来捕捉价值:

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

并注意到它不包含任何Authorization标头。只需托管cookie标题。


更新

应该获得Authorization: Bearer ACCESS TOKEN

5 个答案:

答案 0 :(得分:46)

你使用了什么POSTMAN版本?

您是在本地计算机还是托管服务器上,某些托管公司不允许使用AUTHORIZATION HEADER。

.htaccess修改

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

答案 1 :(得分:8)

来自dschniepp的答案是对的,但我也遇到了这个问题。你必须做两件事:

  1. 检查mod_rewrite是否可用并激活。
  2. 更新位于公共文件夹中的Laravel的.htaccess文件。
  3. 在第一点,您必须检查" mod_rewrite"模块可通过php_info函数在一个单独的php文件中获得。然后,如果它可用,你必须激活它,这取决于你的网络服务器的配置,在我的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本身。

答案 2 :(得分:3)

在Laravel 5.5中,您可以使用apache_request_headers读取牧民,只需在控制器中通过以下行读取

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

确保已添加使用Illuminate \ Http \ Request;在你的控制器

答案 3 :(得分:1)

Apache虚拟主机缺少授权标头。

罪魁祸首的解决方案的一部分可能是因为Apache服务器不允许授权标头通过虚拟主机传递。

要解决此问题,您必须在虚拟主机配置中添加允许Apache将授权标头传递给PHP的行。例如。对于Ubuntu 18.04,虚拟主机是在/etc/apache2/sites-available/your-site-name.confsee this tutorial for better context中定义的。

<VirtualHost>
    # ...
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    # ...
</VirtualHost>

更新虚拟主机配置后,不要忘记重启Apache(例如,再次使用Ubuntu 18.04 sudo systemctl restart apache2)。

这应该可以解决问题。

这里是the original answer

答案 4 :(得分:0)

在此处发布,因为它解决了我的问题。这适用于子域,但显然也可以针对普通域进行调整。在我的路线文件中将其应用于顶部。

$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');