从ajax请求中保存laravel_session cookie-单点登录

时间:2018-07-13 14:17:49

标签: laravel laravel-5

我正在尝试实现单点登录。

另一个应用程序通过一些参数向我的应用程序发出了http发布请求,我发回了请求,并获得了当前用户的电子邮件地址。 (是的,我已经在.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_session cookie包含其他数据。

所以我的问题是: 使用ajax发布请求,如何正确验证用户身份并将其另存为cookie,以便他在打开我的应用程序时登录?

更新

我在kernel.php中添加了一些中间件。现在,会话cookie会自动设置。但是,它似乎没有被加密。来自ajax请求的“ laravel_session” cookie值现在看起来像这样:lYLxSwyuhfHToruJhc0r2zWNLkj9ONTlBM3QjkAo。但是,使用常规的“网络”路由时设置的cookie蜂鸣看起来像这样: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 个答案:

答案 0 :(得分:0)

我找到了解决方案。我的Kernel.php文件中需要StartSession::classEncryptCookies::class定义,并且EncryptCookies:class必须是列表中的第一个元素。直接将其放在StartSession::class

之前对我没有用

这是Kernel.php中我正在使用的“ api”定义

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

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