У меня есть несколько пользовательских промежуточных программ, определенных в 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
?