自定义标题在Laravel $ request对象中不可用

问题描述 投票:2回答:1

我有一个Web应用程序,我根据我在API_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是一个映射到我的应用程序的自定义虚拟主机

enter image description here

我的路线如下所示位于api.php,默认情况下将位于api前缀下的路线组下方

Route::group(['prefix' => 'product'], function(){
    Route::get('read', 'API\ProductController@read');
}

出现问题,如果我调用getallheaders(),我可以看到我的自定义标题,如下所示

enter image description here

但在$request,我无法得到它。对于这个问题的任何领导,我将不胜感激。

我的努力包括追踪SET对象中这些标题实际上是$request的位置,我在Symfony源代码中检查了ServerBag.php

Symfony ServerBag Class Method - getHeaders

如果你看看这个功能getHeaders。它只在headers数组中添加选择性标题,或者以Content作为起始字符串或以HTTP_开头。我尝试传递自己的头像HTTP_API_TOKEN但成功:-(

laravel laravel-5 http-headers laravel-5.4
1个回答
1
投票

你能尝试使用全球助手request()吗?

request()->header('API_TOKEN'); //<-- manually passing the string first, for test purposes

编辑------------正如OP在下面的评论中提到:

我们应该像Camel一样访问我们的标题所以将它作为API-TOKEN发送并作为request()->header('Api-Token');访问它

© www.soinside.com 2019 - 2024. All rights reserved.