У меня есть проект с несколькими пакетами, которые имеют маршруты. У меня есть промежуточная / демонстрационная среда, которая должна быть общедоступной.
Есть ли способ требовать промежуточное программное обеспечение аутентификации (или что-то подобное) для всех маршрутов, не помещая его на все отдельные маршруты и группы маршрутов? (Думая что-то в начальной загрузке ??)
Если вы хотите, чтобы промежуточное программное обеспечение запускалось во время каждого HTTP-запроса к вашему приложению, просто перечислите класс промежуточного программного обеспечения в $middleware
собственность вашего app/Http/Kernel.php
учебный класс.
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
YOUR MIDDLEWARE::class,
];
Если у вас нет доступа или вы не хотите изменять контроллеры пакетов, вы можете создать промежуточное программное обеспечение (рекомендуется наследовать от AuthenticateSession
, Например:
<?php
namespace App\Http\Middleware;
use Illuminate\Session\Middleware\AuthenticateSession;
use Auth;
use Closure;
class AuthenticateIfEnvironment extends AuthenticateSession
{
public function handle($request, Closure $next)
{
if (env('APP_ENV') == 'XXXXXXXX' && !Auth::user() && !$request->is('login')) {
return redirect('/login');
}
return parent::handle($request, $next);
}
}
затем Kernal.php
выглядит так:
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\AuthenticateIfEnvironment::class,
];
Других решений пока нет …