我正在使用POSTMAN通过包含授权的标头向api发送GET请求。
我知道数据头是有效的,因为如果它没有,则路由返回401错误。
我想获得Authorization标头,如下所示:
$access_token = Request::header('Authorization');
但注意到它返回NULL。
所以我试着用以下方法来捕捉价值:
die(var_dump(Request::header()));
并注意到它不包含任何Authorization标头。只需托管cookie标题。
更新
应该获得Authorization: Bearer ACCESS TOKEN
答案 0 :(得分:46)
你使用了什么POSTMAN版本?
您是在本地计算机还是托管服务器上,某些托管公司不允许使用AUTHORIZATION HEADER。
.htaccess修改
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
答案 1 :(得分:8)
来自dschniepp的答案是对的,但我也遇到了这个问题。你必须做两件事:
在第一点,您必须检查" 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.conf
,see this tutorial for better context中定义的。
<VirtualHost>
# ...
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
# ...
</VirtualHost>
更新虚拟主机配置后,不要忘记重启Apache(例如,再次使用Ubuntu 18.04 sudo systemctl restart apache2
)。
这应该可以解决问题。
答案 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');