我有一个服务,需要通过另一个服务进行身份验证。
为此,我设置了一个中间件,它从我的初始请求中提取Authorization标头,然后创建一个带有标头集的curl请求到Auth Service。
public function handle($request, Closure $next) {
$authHeader = $request->header('Authorization');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.user.eventmanager.app/getAccess");
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
'Authorization: ' . $authHeader,
'Origin: http://api.asdf.rerere.app'
));
$result = curl_exec($ch);
if($result) {
curl_close($ch);
return $next($request);
} else {
curl_close($ch);
return response("Invalid Token or expired Token", 401);
}
}
请求按预期返回请求的资源,但也在响应中添加了User对象(我通过curl请求得到的对象,我想在中间件中对用户对象进行进一步检查,但我不希望它返回到初始请求)。
以下是我想要的响应的控制器:
public function show($id)
{
$event = Event::with('timeTableEntries', 'venue', 'bands')->find($id);
if(!$event) {
return $this->respondNotFound('Event does not exist!');
}
return $this->respond([
'data' => $this->eventTransformer->transform($event)
]);
}
不知怎的,卷曲中的用户对象最终出现在了我的响应中。
知道为什么会发生这种事吗?
您没有在curl选项上返回transfer,这会阻止响应输出并返回字符串。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
根据http://php.net/manual/en/function.curl-setopt.php