使用AJAX时Laravel会话cookie未加密



我将为我的应用程序创建一个单一登录界面。另一个应用程序发送AJAX POST请求,我对用户进行身份验证并返回响应。正在设置会话cookie,但未对其进行加密。

相关代码

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

我在Kernel.php 中的"api"部分

'api' => [
'throttle:60,1',
'bindings',
IlluminateSessionMiddlewareStartSession::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
AppHttpMiddlewareEncryptCookies::class,
],

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

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

Kernel.php中的EncryptCookies类在AJAX发布请求中似乎没有任何作用,但仅对会话部分有影响。当我手动添加类似的cookie时

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

它是加密的!

当我在Kernel.php中完全删除"api"one_answers"web"的EncryptCookies时,从AJAX请求创建的会话将正确加载,但不再加密。

如何对AJAX会话cookie进行加密?我需要其他中间件吗?

谢谢你的帮助。

在阅读了lagbox中的注释后,我在"api"部分尝试了几个地方进行EncryptCookies::class定义。我不仅需要把它放在StartSession之前,而且需要把它作为第一个元素。现在它起作用了!

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

protected $middlewareGroups = [
'web' => [
AppHttpMiddlewareEncryptCookies::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
IlluminateSessionMiddlewareStartSession::class,
IlluminateSessionMiddlewareAuthenticateSession::class,
IlluminateViewMiddlewareShareErrorsFromSession::class,
AppHttpMiddlewareVerifyCsrfToken::class,
IlluminateRoutingMiddlewareSubstituteBindings::class,
AppHttpMiddlewareApp::class,
],
'api' => [
AppHttpMiddlewareEncryptCookies::class,
'throttle:60,1',
'bindings',
IlluminateSessionMiddlewareStartSession::class,
IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
],
];

希望这是有益的。

最新更新