Laravel заказ промежуточного ПО - PullRequest
1 голос
/ 03 августа 2020

У меня есть несколько пользовательских промежуточных программ, определенных в App\Http\Kernel.php, после тех, которые поставляются с Laravel:

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

        // Custom Middleware
        'custom1' => \App\Http\Middleware\Custom1::class,
        'custom2' => \App\Http\Middleware\Custom2::class,
        'custom3' => \App\Http\Middleware\Custom3::class,
    ];

В Custom1 Я использую auth('web')->user()->id, что дает ошибку Trying to get property 'id' of non-object .

Эта ошибка иногда, а не всегда, возникает в моей производственной среде, и трудно понять, почему.

Я предполагаю, что пользователь по какой-то причине не аутентифицирован (время сеанса истекло?) . Если это так, то мне интересно, почему промежуточное ПО auth этого не улавливает.

Далее в файле ядра есть:

protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\Authenticate::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class,
    ];

Может быть, Custom1 промежуточное ПО выполняется перед промежуточным ПО для аутентификации, и следует ли мне добавить его в конце $middlewarePriority?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...