我即将为我的应用程序创建一个单点登录界面。另一个应用程序发送 AJAX POST 请求,我对用户进行身份验证并返回响应。正在设置会话 cookie,但未加密。
相关代码
$user = User::where('email', $email)->first();
if ($user) {
Auth::login($user);
return response("OK", 200);
}
Run Code Online (Sandbox Code Playgroud)
我在 Kernel.php 中的“api”部分
'api' => [
'throttle:60,1',
'bindings',
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\App\Http\Middleware\EncryptCookies::class,
],
Run Code Online (Sandbox Code Playgroud)
我的路线(没有额外的中间件)
Route::post(
'/auth-request', [
'uses' => 'UserController@post_authenticateRequest',
'as' => 'authrequest'
]);
Run Code Online (Sandbox Code Playgroud)
Kernel.php 中的 EncryptCookies 类在 AJAX 发布请求中似乎没有任何影响 - 但仅对会话部分有效。当我手动添加一个 cookie 时
response("OK", 200)->cookie("mysession", Session::getId(), 60);
Run Code Online (Sandbox Code Playgroud)
它是加密的!
当我完全删除 Kernel.php 中“api”和“web”的 EncryptCookies 时,从 AJAX 请求创建的会话被正确加载 - 但不再加密。
如何加密 AJAX 会话 cookie?我还需要其他中间件吗?
谢谢你的帮助。
在阅读了 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,
],
];
Run Code Online (Sandbox Code Playgroud)
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |