自定义标头在Laravel$请求对象中不可用
我有一个web应用程序,我在其中根据作为自定义标头在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
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