【问题标题】:Null Auth user inside Middleware中间件中的 Null Auth 用户
【发布时间】:2019-09-19 14:29:20
【问题描述】:

全局中间件,为每个路由上的每个请求运行的中间件:

protected $middleware = [
        \App\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,
        \Barryvdh\Cors\HandleCors::class,
        \Spatie\Cors\Cors::class,
    ];

中间件所在的组:

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
        'api' => [
            'throttle:100000,1',
            'bindings',
            \Barryvdh\Cors\HandleCors::class,
        ],

    ];

我命名的漂亮中间件:

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,  
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'jwt.auth' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class,
        'jwt.refresh' => \Tymon\JWTAuth\Http\Middleware\RefreshToken::class,
        'log.request' => \App\Http\Middleware\LogRequest::class,
        'admin' => \App\Http\Middleware\AdminMiddleware::class,
    ];

中间件的顺序,从上到下:

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

我调用路线的方式:

Route::get('show/question', 'APIController@getQuestion')->name('getQuestion')->middleware('admin');

我的中间件 AdminMiddleware.php 内容:

<?php

namespace App\Http\Middleware;

use Closure;
//use App\Http\Middleware\Auth;

use Illuminate\Support\Facades\Auth;
use Illuminate\Contracts\Auth\Guard;

class AdminMiddleware
{   
    public function handle($request, Closure $next)
    {
        dd(Auth::user());
        dd($request->all());
        return view('login');
    }
}

我尝试将我的中间件放在列表底部的最后,我尝试将它添加到底部的“web”中,但没有任何效果。有任何想法吗?我需要在中间件中处理认证用户的对象。

【问题讨论】:

    标签: laravel authentication middleware


    【解决方案1】:

    只是因为你在这条路由中没有 auth 中间件 :)

    只要做:

    Route::get('show/question', 'APIController@getQuestion')
        ->name('getQuestion')
        ->middleware('auth', 'admin');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 2014-11-03
      • 2015-11-16
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多