代码之家  ›  专栏  ›  技术社区  ›  kirschkern

使用Ajax时未加密Laravel会话cookie

  •  0
  • kirschkern  · 技术社区  · 8 年前

    我将为我的应用程序创建一个单一登录界面。另一个应用程序发送一个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 post请求中似乎没有任何效果,但只对会话部分有效。当我手动添加cookie时

    response("OK", 200)->cookie("mysession", Session::getId(), 60);
    

    它是加密的!

    当我完全删除kernel.php中“api”和“web”的encryptcookies时,从Ajax请求中创建的会话将被正确加载,但不再进行加密。

    如何加密Ajax会话cookie?我需要其他中间件吗?

    谢谢你的帮助。

    1 回复  |  直到 8 年前
        1
  •  2
  •   kirschkern    8 年前

    在阅读了LagBox的评论之后,我在“api”部分中尝试了几处加密cookies::类定义。我不仅需要把它放在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,
        ],
    ];
    

    希望能帮上忙。