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中的授权错误。有关此问题的详细信息,请参阅。