J'ai deux (mais imaginons plus) de micro-services (API) qui doivent être conscients de l'utilisateur authentifié. Idéalement, j'aimerais simplement reprendre leurs séances.
Tous les micro-services utilisent le même stockage pour les sessions: redis.
Tous les appels d'API auront l'en-tête Cookie afin que tous les services puissent reprendre les sessions basées sur ce cookie. J'ai réussi à implémenter cela via PHP $ _SESSIONs.
Maintenant, la question: comment vous y prendriez-vous pour implémenter ceci avec Laravel/Lumen?
Laravel a officiellement cessé de prendre en charge les sessions et les vues dans la structure laravel/Lumen
à partir de la version 5.2 et dans les services.
Mais laravel
a toujours un composant illuminate/session
qui peut être installé dans Lumen/framework
et nous pouvons jouer avec cela.
Étape 1
installer illuminate/session
en utilisant
composer require illuminate/session
Étape 2
Maintenant, allez à bootstrap/app.php
et ajoutez ce middleware
$app->middleware([
\Illuminate\Session\Middleware\StartSession::class,
]);
Étape 3
Puisque Illuminate\Session\SessionManager
prend une primitive qui est heureusement $app
et que le type n'est pas indiqué, nous pouvons donc tirer parti de containerBindings
.
Dans bootstrap/app.php
ajouter des liaisons pour \Illuminate\Session\SessionManager
$app->bind(\Illuminate\Session\SessionManager::class, function () use ($app) {
return new \Illuminate\Session\SessionManager($app);
});
Étape 4
Ajoutez maintenant config/session.php
, car il n’est pas présent dans Lumen
par défaut. Vous pouvez prendre session.php
dans Laravel Dépôt officiel .
Étape - 5
Ajoutez la ligne suivante dans bootstrap/app.php
pour charger config dans un conteneur.
$app->configure('session');
Étape - 6
Enregistrer le fournisseur de services de session
$app->register(\Illuminate\Session\SessionServiceProvider::class);
Parce que contrairement à Laravel
, vous devez dire à Lumen
de lire le fichier de configuration.
Comment utiliser
$app->get('/', function () {
app('session')->put('name', Rand());
dd(app('session')->all());
});
Il est important que vous utilisiez également $request->session()
, sinon cela ne fonctionnera pas.
J'ai essayé la solution mentionnée ci-dessus, cependant, il est également nécessaire de créer un dossier storage/framework/sessions
si vous utilisez les paramètres par défaut.
Le lien suivant est l’économiseur de vie . ici