Enabling session in lumen framework

前端 未结 4 1003
抹茶落季
抹茶落季 2020-12-30 06:20

I have two (but let\'s image more) micro-services (API) which need to be aware of authenticated user. Ideally I would simple like to resume their sessions.

All micro

4条回答
  •  我在风中等你
    2020-12-30 06:33

    Update as of 18th July 2019

    (This answer was getting a lot of attention from Laravel community so I thought of updating it.)

    Laravel has officially stopped supporting sessions & views in laravel/lumen framework from version 5.2 and on wards.

    But laravel still have a component illuminate/session which can be installed in lumen/framework and we can play around with this.

    Step - 1

    install illuminate/session using

    composer require illuminate/session

    Step - 2

    Now goto bootstrap/app.php and add this middleware

    $app->middleware([
        \Illuminate\Session\Middleware\StartSession::class,
    ]);
    

    Purpose of adding the above middleware is to start session on every request and save session before serving response.

    Step - 3

    Now add config/session.php, since it is not present in Lumen by default. You can take session.php from Laravel official repo.

    Step - 4

    Create framework session storage directory by

    mkdir -p storage/framework/sessions
    

    Thanks to DayDream

    Step - 5

    In bootstrap/app.php add bindings for \Illuminate\Session\SessionManager

    $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');
    });
    

    Thanks to @xxRockOnxx for finding loadComponent method. It takes 3 arguments,

    • first one is config file name. (file should be present in config/ directory)
    • second is ServiceProvider FQN
    • third is return of this method.

    loadComponent just calls the $app->register and inject $app while building the ServiceProvider

    How to Use

    
    // 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'),
        ]);
    });
    

    I've also added example over github.

    https://github.com/rummykhan/lumen-session-example

提交回复
热议问题