我将为我的应用程序创建一个单一登录界面。另一个应用程序发送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,
],
];
希望这是有益的。