我有两个(但让我们的图像更多)微服务(API)需要知道经过身份验证的用户。理想情况下,我很想恢复他们的会议。
所有微服务都使用相同的会话存储:redis。
所有API调用都将具有Cookie标头,因此所有服务都可以根据该Cookie恢复会话。我已经通过PHP $ _SESSIONs成功实现了这个。
现在的问题是:你将如何用Laravel / Lumen实现这个目标?
答案 0 :(得分:28)
Laravel已经正式停止支持会议和版本5.2和版本的laravel/lumen
框架中的视图。
但是laravel
仍然有一个illuminate/session
组件可以安装在lumen/framework
中,我们可以使用它。
步骤1
使用
安装illuminate/session
composer require illuminate/session
步骤2
现在转到bootstrap/app.php
并添加此中间件
$app->middleware([
\Illuminate\Session\Middleware\StartSession::class,
]);
步骤3
由于Illuminate\Session\SessionManager
采用了一个幸运$app
的原语,并且没有提示类型,因此我们可以利用containerBindings
。
在bootstrap/app.php
添加\Illuminate\Session\SessionManager
$app->bind(\Illuminate\Session\SessionManager::class, function () use ($app) {
return new \Illuminate\Session\SessionManager($app);
});
步骤4
现在添加config/session.php
,因为默认情况下它不在Lumen
中。您可以从Laravel Official Repository获取session.php
。
步骤5
在bootstrap/app.php
中添加以下行以在容器中加载配置。
$app->configure('session');
步骤6
注册会话服务提供商
$app->register(\Illuminate\Session\SessionServiceProvider::class);
因为与Laravel
不同,您可以告诉Lumen
读取配置文件。
如何使用
$app->get('/', function () {
app('session')->put('name', rand());
dd(app('session')->all());
});
答案 1 :(得分:3)
重要的是你也使用$request->session()
,否则它将无效。
答案 2 :(得分:2)
我尝试了上述解决方案,但是,如果使用默认设置,还需要创建文件夹storage/framework/sessions
。
答案 3 :(得分:1)
以下链接是救生员。 here
答案 4 :(得分:1)
接受的答案已过时。
我在对此https://github.com/ArkinSolomon/zombie-fight/blob/master/src/map/createMap.js
的回答中回答并解释了如何正确执行操作我还在question
上发布了问题所在的问题引用:
在您提供的链接中找到的解决方案是,它首先告诉您手动注册
(root) |_server.js |_src |_backend | |_console.js |_map |_createMap.js
以防止SessionManager
,然后还注册现有的unresolvable depedency parameter #0 $app
另一个实例SessionServiceProvider
。存在的问题是,某些组件使用了另一个实例,而其他部分使用了新的实例,这导致我的auth
SessionManager
会话尽管实际上位于attempt
内,但仍未保存。