Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel路由筛选器正在获取JWT身份验证的请求头,数组\u密钥\u存在无法正常运行_Php_Http_Laravel - Fatal编程技术网

Php Laravel路由筛选器正在获取JWT身份验证的请求头,数组\u密钥\u存在无法正常运行

Php Laravel路由筛选器正在获取JWT身份验证的请求头,数组\u密钥\u存在无法正常运行,php,http,laravel,Php,Http,Laravel,我在下面编写了这个简单的过滤器: Route::filter('token', function() { $headers = json_decode(json_encode(getallheaders()), true); if(array_key_exists($headers['Authorization'], $headers)) { echo 'test'; } }); 它使用getallheaders函数而不是Laravel的请求类,因为

我在下面编写了这个简单的过滤器:

Route::filter('token', function() 
{
    $headers = json_decode(json_encode(getallheaders()), true);

    if(array_key_exists($headers['Authorization'], $headers)) {
        echo 'test';
    }
});
它使用getallheaders函数而不是Laravel的请求类,因为请求类还不能识别自定义HTTP头

打印此数组时,它将返回:

Array
(
    [Host] => api.myapi.com
    [Connection] => keep-alive
    [Accept] => application/json, text/plain, */*
    [Origin] => http://myorigin
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
    [Authorization] => eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9hcGkuYmFjazlpbnMuY29tIiwiYXVkIjoiaHR0cDpcL1wvMTYyLjI0My4xMDEuMjAyXC9zbWFydDIiLCJpYXQiOjE0MTQ2ODE1NzgsIm5iZiI6MTQxNDY4MzM3OCwidXNlciI6ImI4YTAwNzIxLTQwZjEtNzgwMS1iNGI5LTUwY2UxNTJjZTJlYyJ9.VrcWRwupzuS_Y5PNiNfXCAMl3bVbifFIHptMO6
    [Referer] => http://myorigin/myproject/
    [Accept-Encoding] => gzip,deflate,sdch
    [Accept-Language] => en-US,en;q=0.8
)
但是,数组_key_存在$headers['Authorization'],$headers的计算结果持续为false。在这种情况下,它为什么会评估为false?我在头中发送授权令牌,当我打印数组时,它清楚地识别头并根据请求提供正确的值


这有什么问题吗?

所以我解决了自己的问题。另一种方式,但我实现了我试图检查以确保授权标头已发送的目的

我在array\u keys$headers上运行了一个print\r,它返回了一个包含所有头的数组

然后我写道:

echo在数组“Authorization”中,数组\u keys$头

它返回true,因为它是true


如果有人有更好的解决方案,或者找到了为什么array_key_exists不起作用的答案,我很想听听原因。

您的原始示例失败,因为您使用了array_key_exists$headers['Authorization'],$headers,而您本应使用array_key_exists'Authorization',$headers

但更重要的是,这并不是解决问题的最佳方案。测试起来相当困难,而且很容易为您提供更好的方法来解决这个问题,主要是提供的请求对象

Route::filter('token', function ($route, \Illuminate\Http\Request $request) {
    if ($request->headers('Authorization')) {
        echo "Token is " . {$request->headers('Authorization')};
    }
});

这很容易提供测试过滤器是否按预期工作的能力。代码也更容易阅读。

Ah。。没问题。愚蠢的错误。我尝试使用Request类,但它无法识别自定义HTTP头(如我所说)。您可以修复.htaccess中的授权错误。有关此问题的详细信息,请参阅。