Search code examples
phplaravelcurlmiddleware

Laravel curl in middleware gets added to response


I have a service, that needs to authenticate via another service.

For this I setup a Middleware that extracts the Authorization header out of my initial request, and then creates a curl request to the Auth Service with the header set.

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);
    }

}

The request returns the requested ressource as expected, but also adds in the User object in the response (the one I get via the curl request, I want to do further checking with the user object in the middleware, but I dont want it returned to the inital request).

Here is what my controller for the response I want looks like:

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)
    ]);
}

Somehow the User Object from the curl ends up in my respons.

Any idea why this happens?


Solution

  • You're not returning transfer on your curl options, which stops the response from outputting and returns the string instead.

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    as per http://php.net/manual/en/function.curl-setopt.php