Laravel $ request对象

时间:2017-03-16 13:37:39

标签: laravel laravel-5 http-headers laravel-5.4

我有一个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,但成功: - (

1 个答案:

答案 0 :(得分:1)

您可以尝试使用全局帮助器request()

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

修改------------ 正如OP在下面的评论中提到的那样:

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

访问它