使用AJAX时Laravel会话cookie没有加密(Laravel session cookie

2019-11-05 00:35发布

我将要创建单点登录界面我的应用程序。 其他应用程序发送AJAX POST请求和我认证用户,并返回一个响应。 会话Cookie是beeing集,但它是不加密的。

相关的代码

$user = User::where('email', $email)->first();
if ($user) {
  Auth::login($user);
  return response("OK", 200);
}

在Kernel.php我的“API”的一部分

'api' => [
    'throttle:60,1',
    'bindings',
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \App\Http\Middleware\EncryptCookies::class,
],

我的路线(没有额外的中间件)

Route::post(
  '/auth-request', [
  'uses' => 'UserController@post_authenticateRequest',
  'as' => 'authrequest'
]);

在Kernel.php的EncryptCookies类似乎并不在AJAX的POST请求任何影响 - 但只适用于会话的一部分。 当我手动添加像饼干

response("OK", 200)->cookie("mysession", Session::getId(), 60);

它是加密的!

了,但没有加密 - 当我完全删除EncryptCookies在Kernel.php两个“API”和“网络”,从AJAX请求被正确地加载创建的会话。

如何让AJAX会话cookie beeing加密? 我是否需要任何其他中间件?

谢谢你的帮助。

Answer 1:

阅读从lagbox的评论后,我试过好几个地方的EncryptCookies ::类定义在我的“API”的一部分。 我不仅需要StartSession过,但作为第一个元素放置。 现在,它的作品!

在Kernel.php我完全$ middlewareGroups部分现在看起来是这样的:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \App\Http\Middleware\App::class,
    ],

    'api' => [
        \App\Http\Middleware\EncryptCookies::class,
        'throttle:60,1',
        'bindings',
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    ],
];

希望这是有益的。



文章来源: Laravel session cookie not encrypted when using AJAX