我将为我的应用程序创建一个单点登录界面。另一个应用程序发送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发布请求没有任何影响-而是仅对会话部分有效。当我手动添加Cookie
response("OK", 200)->cookie("mysession", Session::getId(), 60);
它已加密!
当我完全删除Kernel.php中针对“ api”和“ web”的EncryptCookies时,从AJAX请求创建的会话将正确加载-但不再进行加密。
如何加密AJAX会话Cookie?我还需要其他中间件吗?
感谢您的帮助。
答案 0 :(得分:1)
在阅读了lagbox的评论后,我在“ api”部分尝试了多个EncryptCookies :: class定义的地方。我不仅需要将其放置在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,
],
];
希望这会有所帮助。