我有一个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
是一个映射到我的应用程序的自定义虚拟主机
我的路线如下所示位于api.php
,默认情况下将位于api
前缀下的路线组下方
Route::group(['prefix' => 'product'], function(){
Route::get('read', 'API\ProductController@read');
}
出现问题,如果我调用getallheaders()
,我可以看到我的自定义标题,如下所示
但在$request
,我无法得到它。对于这个问题的任何领导,我将不胜感激。
我的努力包括追踪SET
对象中这些标题实际上是$request
的位置,我在Symfony源代码中检查了ServerBag.php
Symfony ServerBag Class Method - getHeaders。
如果你看看这个功能getHeaders
。它只在headers
数组中添加选择性标题,或者以Content
作为起始字符串或以HTTP_
开头。我尝试传递自己的头像HTTP_API_TOKEN
但成功:-(
你能尝试使用全球助手request()
吗?
request()->header('API_TOKEN'); //<-- manually passing the string first, for test purposes
编辑------------正如OP在下面的评论中提到:
我们应该像Camel一样访问我们的标题所以将它作为API-TOKEN
发送并作为request()->header('Api-Token');
访问它