在 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"]);
}
}
我正在使用 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"]);
}
}