根据不同guard修改不同session名称

需求
1、有四个guard manger、tenant、apply、workbench
2、都使用的是session登录
3、希望他们的session name 和 cookie 中 session name 都变为对用的名称。 如 manager_session、tenant_sesson….

实现一 中间件方式

class SassStartSession extends StartSession
{
    public function handle($request, Closure $next, ...$guards)
    {
        $sessionName = $this->getSessionName($guards);

        app('config')->set('session.cookie', $sessionName);

        return parent::handle($request, $next);
    }
}
$router->group([
    'prefix' => 'auth',
    'namespace' => 'Auth',
    'middleware' => ['session.name:workbench']
], function (Router $router) {
    $router->post('login', 'AuthController@login');
    $router->post('logout', 'AuthController@logout');
    $router->get('current', 'AuthController@current');
});

这中方式貌似中间件改的配置在session内部不生效

原因可能是因为

<?php

namespace Illuminate\Session;

use Illuminate\Support\ServiceProvider;
use Illuminate\Session\Middleware\StartSession;

class SessionServiceProvider extends ServiceProvider
{
    /**
 * Register the service provider. * * @return void
 */  public function register()
    {
        $this->registerSessionManager();

        $this->registerSessionDriver();

        $this->app->singleton(StartSession::class);
    }

    /**
 * Register the session manager instance. * * @return void
 */  protected function registerSessionManager()
    {
        $this->app->singleton('session', function ($app) {
            return new SessionManager($app);
        });
    }

    /**
 * Register the session driver instance. * * @return void
 */  protected function registerSessionDriver()
    {
        $this->app->singleton('session.store', function ($app) {
            return $app->make('session')->driver();
        });
    }
}

初始化的时候已经生成好了 中间件再去改已经在后面了 所以不生效

实现二 boot

<?php

namespace App\Providers;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any apply services.
     *
     * @return void
     */
    public function boot()
    {
        app()->extend('session', function($manager, $app) {
            $app['config']['session.cookie'] = 'sass_session';
            return new SessionManager($app);
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {

    }
}

这种方式可以改成功 而且能正常登录但是没办法区分是四种的哪种

求解决方案

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!