Laravel中间件订单

时间:2020-08-03 09:14:50

标签: laravel

在Laravel附带的那些中间,我在App\Http\Kernel.php中定义了一些自定义中间件:

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中间件在auth中间件之前执行,我应该在$middlewarePriority的末尾添加它吗?

0 个答案:

没有答案
相关问题