roc*_*k3t 9 laravel microservices lumen
我有两个(但让我们的图像更多)微服务(API)需要知道经过身份验证的用户.理想情况下,我很想恢复他们的会话.
所有微服务都使用相同的存储来进行会话:redis.
所有API调用都将具有Cookie标头,因此所有服务都可以基于该cookie恢复会话.我已经通过PHP $ _SESSIONs成功实现了这一点.
现在的问题是:你将如何与Laravel/Lumen一起实施?
rum*_*han 36
Laravel已经正式停止支持laravel/lumen5.2版本和病房的框架中的会话和观点.
但是laravel仍然有一个illuminate/session可以安装的组件,lumen/framework我们可以玩这个.
步骤1
安装illuminate/session使用
composer require illuminate/session
第2步
现在转到bootstrap/app.php并添加此中间件
$app->middleware([
\Illuminate\Session\Middleware\StartSession::class,
]);
Run Code Online (Sandbox Code Playgroud)
第3步
由于config/session.php幸运地采用了一个原语Lumen,并且它没有类型暗示,所以我们可以利用它session.php.
在bootstrap/app.php添加绑定\Illuminate\Session\SessionManager
mkdir -p storage/framework/sessions
Run Code Online (Sandbox Code Playgroud)
第4步
现在添加loadComponent,因为它config默认不存在.您可以config/从Laravel Official Repository中获取.
第5步
添加以下行loadComponent以在容器中加载配置.
$app->singleton(Illuminate\Session\SessionManager::class, function () use ($app) {
return $app->loadComponent('session', Illuminate\Session\SessionServiceProvider::class, 'session');
});
$app->singleton('session.store', function () use ($app) {
return $app->loadComponent('session', Illuminate\Session\SessionServiceProvider::class, 'session.store');
});
Run Code Online (Sandbox Code Playgroud)
第6步
注册会话服务提供商
// Save Session
$router->get('/', function (\Illuminate\Http\Request $request) {
$request->session()->put('name', 'Lumen-Session');
return response()->json([
'session.name' => $request->session()->get('name')
]);
});
// Test session
$router->get('/session', function (\Illuminate\Http\Request $request) {
return response()->json([
'session.name' => $request->session()->get('name'),
]);
});
Run Code Online (Sandbox Code Playgroud)
因为不像$app->register,你要告诉$app读取配置文件.
如何使用
$app->middleware([
\Illuminate\Session\Middleware\StartSession::class,
]);
Run Code Online (Sandbox Code Playgroud)
接受的答案已过时。
我在这个问题的回答中回答并解释了如何正确地做到这一点
我还在Laracasts上发布了我的问题是什么问题
去引用:
在您提供的链接中找到的解决方案是,首先它告诉您手动注册以
SessionManager防止然后unresolvable depedency parameter #0 $app还注册SessionServiceProvider还绑定另一个实例的现有实例SessionManager。问题是,某些组件使用另一个实例,而其他部分使用新实例,这导致我的身份验证
attempt会话尽管实际上在内部,但并未保存put。
| 归档时间: |
|
| 查看次数: |
8626 次 |
| 最近记录: |