web-dev-qa-db-fra.com

Session d'activation dans le framework Lumen

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?

6
rock3t

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());
});
24
rummykhan

Il est important que vous utilisiez également $request->session(), sinon cela ne fonctionnera pas. 

3
Kevin Upton

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.

2
Daydream

Le lien suivant est l’économiseur de vie . ici

1
Kevin RED