在 laravel 中的用户身份验证后,我可以在哪里即时更改配置?

where can I change configurations on the fly after User autenticaton in laravel?

我正在使用 elfinder laravel 软件包来管理和组织文件。

它有一个 elfinder.dir 配置选项,用于指定用户可以向其上传文件的目录。

现在我想将此选项更改(或创建)为与登录用户 username.

同名的目录

为此,我在一个中间件中编写了一些代码,该中间件在用户身份验证后运行,以限制用户对管理面板的访问。像这样:

class IsAdmin
    {

        public function handle ($request, Closure $next)
        {
            if (Auth::check()) {

                $username = Auth::user()->username;

                if (!File::exists(public_path('upload') . '/' . $username)) {
                    File::makeDirectory(public_path('upload') . '/' . $username, 0775);
                }
                Config::set('elfinder.dir', ["upload/$username"]);

                return $next($request);
            }
            return Redirect::to('/admin/login');
        }
    }

如您所见,如果没有与用户名相同的目录,它将被创建。

但我想知道我在中间件中执行此操作是正确的还是有另一个(或适当的)位置?

我不知道你用的是什么laravel版本,但我认为这是你应该在活动中做的事情。

您可以监听登录事件并在其中执行您的操作。

根据@yannis-berrouag 的回答和 l5.3 文档中的 authentication events 我这样做了。

首先我将这个添加到 EventServiceProvider.php :

'Illuminate\Auth\Events\Authenticated' => [
        'App\Listeners\SetElfinderConfigs',
],

然后我将我想要的操作添加到 SetElfinderConfigs 侦听器,如下所示:

class SetElfinderConfigs
    {
        /**
         * Create the event listener.
         *
         * @return void
         */
        public function __construct ()
        {
            //
        }

        /**
         * Handle the event.
         *
         * @param  Authenticated $event
         *
         * @return void
         */
        public function handle (Authenticated $event)
        {
            $username = $event->user->username;
            if (!File::exists(public_path('upload') . '/' . $username)) {
                File::makeDirectory(public_path('upload') . '/' . $username, 0775);
            }
            Config::set('elfinder.dir', ["upload/$username"]);
        }
    }