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

从ajax请求保存laravel\u会话cookie-单点登录

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

    另一个应用程序向我的应用程序发出http post请求,传递一些参数,我返回请求并获取当前用户的电子邮件地址(是的,我在.htaccess中设置了必要的CORS头)

    我现在正在使用该电子邮件创建一个用户实例,并尝试对该用户进行身份验证。

    Auth::login($user, true);
    return response("OK", 200);
    

    这可以正常工作(如果找到用户)。

    我现在期望使用Auth::login创建一个经过身份验证的会话,并保存一个会话cookie。一旦用户打开我的应用程序,就会发现此会话,无需进一步登录,仪表板就会打开。

    但是,没有保存任何cookie。

    然后我尝试使用手动保存cookie

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

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

    以及

    Cookie::queue(Cookie::make("laravel_session", Session::getId(), 60));
    response("OK", 200);
    

    在任何情况下,cookie都是设置好的,但当打开我的应用程序时,会显示登录屏幕。所以我的猜测是,肯定有我遗漏的任何东西,或者laravel\u会话cookie包含一些其他数据。

    使用ajax post请求,如何正确地对用户进行身份验证并将其保存为cookie,以便他在打开我的应用程序时登录?

    我在kernel.php中添加了一些中间件。现在会话cookie将自动设置。然而,它似乎没有得到加密。ajax请求中的“laravel\u session”cookie值现在如下所示: lYLxSwyuhfHToruJhc0r2zWNLkj9ONTlBM3QjkAo . 然而,当使用通常的“网络”路径时,cookie beeing设置如下所示: eyJpdiI6InV5bGRQNFJ4c01TYjZwT0I0amxzS1E9PSIsInZhbHVlIjoiZFI2WWpVWGxmTldDcVJvVlwvbVJicXBxM0pjRkVRUlBRKzZWb1BkbzliZHBVdTlmUEV4UzZkaFVMbmlRTHNYczFOZm5HSWkwRXhjb3BJRGI1NGRyM2tnPT0iLCJtYWMiOiJjMjAwMWIyMGIxYmQwYzkxMGQyNGJhMDZmZDJiNThjNGZhMTUyZWVjZDlkNjg5ZWVjYjY2MGE1ZTlmZDAxOGNmIn0%3D

    这是我的 ['api'] kernel.php中的值 protected $middlewareGroups

    'api' => [
      'throttle:60,1',
      'bindings',
      \Illuminate\Session\Middleware\StartSession::class,
      \App\Http\Middleware\EncryptCookies::class,
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class
    ],
    

    但是,当直接在我的响应中设置具有不同名称的会话cookie时,该值现在似乎已加密:

    return response("OK", 200)
      ->cookie("my_session", Session::getId(), $minutes);
    

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

    我找到了解决办法。我需要你的帮助 StartSession::class 以及 EncryptCookies::class EncryptCookies:class 必须是列表中的第一个元素。当我直接把它放在 StartSession::类

    'api' => [
        \App\Http\Middleware\EncryptCookies::class,
        'throttle:60,1',
        'bindings',
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    ],
    

    现在会话cookie已设置并加密。是 啊!

    推荐文章