自定义标头在Laravel$请求对象中不可用

自定义标头在Laravel$请求对象中不可用,laravel,laravel-5,http-headers,laravel-5.4,Laravel,Laravel 5,Http Headers,Laravel 5.4,我有一个web应用程序,我在其中根据作为API\u-token发送到标题中的自定义令牌进行身份验证。在我在源代码(laravel)中进行了所有代码挖掘之后,我不确定发生了什么 这是我的中间件 protected $AUTH_HEADER = 'API_TOKEN'; protected $_RESPONSE = array('status' => false, 'message' => '', 'data' => array()); public function handl

我有一个web应用程序,我在其中根据作为
API\u-token
发送到标题中的自定义令牌进行身份验证。在我在源代码(laravel)中进行了所有代码挖掘之后,我不确定发生了什么

这是我的中间件

protected $AUTH_HEADER = 'API_TOKEN';
protected $_RESPONSE = array('status' => false, 'message' => '', 'data' => array());

public function handle($request, Closure $next, $guard = null)
{
  $response = $this->_RESPONSE;
  if($request->hasHeader($this->AUTH_HEADER)){
    $api_token = $request->header($this->AUTH_HEADER);
    try{
      $request->user = \App\User::where(['api_token' => $api_token])->firstOrFail();
      Auth::login($request->user);
      $response = $next($request);
    }catch(\Exception $exception){
      $response['status'] = false;
      $response['message'] = 'Invalid Token.';
    }
  }else{
    $response['status'] = false;
    $response['message'] = 'Unauthorized Request.';
  }

  // Lines ONLY I used for cross verification of availability of my header
  // $response['data'] = getallheaders();
  // $response['data'] = $_SERVER;
  return $response;
}
这是我的POST请求的屏幕截图,
api.easyinventory.com
是一个定制的虚拟主机,映射到我的应用程序

我的路线在
api.php
中的位置如下所示,默认情况下,它将放置在
api
前缀下的路线组下方

Route::group(['prefix' => 'product'], function(){
    Route::get('read', 'API\ProductController@read');
}
说到这个问题,如果我调用
getallheaders()
,我可以看到我的自定义头,如下所示

但是在
$request
中,我无法获得它。我将感谢在这个问题上的任何线索

我的工作包括跟踪这些头在
$request
对象中的实际位置,我在Symfony源代码中检查了
ServerBag.php


如果您查看此函数
getHeaders
。它只在
headers
数组中添加选择性的头,要么以
Content
作为起始字符串,要么以
HTTP
开头。我试着传递我自己的头,比如
HTTP\u API\u TOKEN
,但是成功了:-(

你能用全局助手
请求()试试吗?


request()->header('API_-TOKEN');//header('API-TOKEN'))

您只是在尝试使用
api_令牌对用户进行身份验证吗?实际上是的,但我的问题是关于访问
$request
对象中的自定义头值。哦,好的。您只是在尝试访问自定义头。我以为您正在尝试进行身份验证。因为laravel对ap具有现成的身份验证i_token。如果这是您想要的……是的,我知道,但是这里的场景有点不同。我太傻了,结果证明这是一个微不足道的问题。我们应该以
Camel cased
的形式访问我们的头,所以在中间件工作中以
API-token
的形式发送它,并以
API-token
的形式访问它。o_0这个评论应该是正确的答案“因此,在中间件中,将其作为API-TOKEN发送,并作为API-TOKEN访问。”@FaroqKhan I将您的评论作为编辑添加到此答案,以帮助其他不会阅读所有评论的人。
request()->header('API_TOKEN'); //<-- manually passing the string first, for test purposes