使用AJAX

时间:2018-07-17 07:06:24

标签: laravel laravel-5

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

感谢您的帮助。

1 个答案:

答案 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,
    ],
];

希望这会有所帮助。