我正在尝试实现单点登录。
另一个应用程序通过一些参数向我的应用程序发出了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);
非常感谢您的帮助。
答案 0 :(得分:0)
我找到了解决方案。我的Kernel.php文件中需要StartSession::class
和EncryptCookies::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已设置并加密。是的!