Laravel 5.4 - Cookie Queue

爷,独闯天下 提交于 2020-05-26 04:32:37

问题


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.


回答1:


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.




回答2:


In case anyone fond their way here by Google, one way for cookie inclusion to silently fail is if you're explicitly defining your domain variable in its creation, and forgot to remove the "http://" from the beginning of it first. That's not the case with OP, but it was what brought me here. ;)



来源:https://stackoverflow.com/questions/45180963/laravel-5-4-cookie-queue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!