Laravel 5.4 - Cookie Queue

Christian picture Christian · Jul 19, 2017 · Viewed 13.5k times · Source

I'm using Laravel 5.4 and I wrote something like:

     Cookie::queue(
        'refresh_token',
        $data->refresh_token,
        864000, // 10 days
        null,
        null,
        false,
        true // HttpOnly
    );

    return response('hello world');

The returned response doesn't contain the refresh_token cookie while return response('hello world')->withCookie(...) does.

The Laravel 5.4 documentation doesn't anymore state queueing cookie as 5.0 doc does. Does it mean that the functionality has been removed in version 5.4 or did I make a mistake in my code?

For sake of completeness, I'm using Dingo API package and the response is crafted it.

Thank you for your help.

Answer

Christian picture Christian · Jul 22, 2017

I found that:

Cookie queuing is not enabled for api requests, this is the reason why it didn't work.

I had to add in the middleware section of the appropriate file:

protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

        //added below line at end of the array
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    ];

Open file App/Http/Kernel.php add the line \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, in protected $middleware array as displayed in above code snippet and test again it should work now.