我有一个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
,但成功: - (
答案 0 :(得分:1)
您可以尝试使用全局帮助器request()
request()->header('API_TOKEN'); //<-- manually passing the string first, for test purposes
修改------------ 强> 正如OP在下面的评论中提到的那样:
我们应该像Camel一样访问我们的标头所以将其作为API-TOKEN
发送并以request()->header('Api-Token');