【问题标题】:Laravel session cookie not encrypted when using AJAX使用 AJAX 时未加密 Laravel 会话 cookie
【发布时间】:2018-12-24 18:58:12
【问题描述】:

我即将为我的应用创建一个单点登录界面。另一个应用程序发送 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',
    \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?我还需要其他中间件吗?

感谢您的帮助。

【问题讨论】:

  • EncryptCookies放在StartSession之前?
  • @lagbox 哦,伙计。我已经这样做了,但它没有改变。但是要检查您的建议,我已将其放在所有其他定义之前,并欢呼它现在已加密!谢谢和欢呼。

标签: laravel laravel-5


【解决方案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,
    ],
];

希望这会有所帮助。

【讨论】:

  • 我在这个项目中使用的是 Laravel 5.4.36
猜你喜欢
  • 2019-04-25
  • 2017-05-30
  • 2016-04-30
  • 2010-11-02
  • 2018-05-27
  • 1970-01-01
  • 2017-01-18
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多