根据不同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 协议》,转载必须注明作者和本文链接