在流明框架中启用会话

时间:2017-11-01 08:39:14

标签: laravel microservices lumen

我有两个(但让我们的图像更多)微服务(API)需要知道经过身份验证的用户。理想情况下,我很想恢复他们的会议。

所有微服务都使用相同的会话存储:redis。

所有API调用都将具有Cookie标头,因此所有服务都可以根据该Cookie恢复会话。我已经通过PHP $ _SESSIONs成功实现了这个。

现在的问题是:你将如何用Laravel / Lumen实现这个目标?

5 个答案:

答案 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内,但仍未保存。