【问题标题】:Argument 1 passed to Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() must be an instance of传递给 Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() 的参数 1 必须是
【发布时间】:2020-05-15 05:21:08
【问题描述】:

我已经创建了一个新的中间件来检查用户令牌我已经创建了中间件然后添加到 kernal.php,但是当我尝试在中间件中访问 $request 时出现错误

这是我的中间件代码

namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Closure;
use App\User;

class CheckToken
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        if($request->header('Token') == '123')
        {
            return ['status' =>2, 'msg' => 'Unathorized'];
        }
        else
        {
            return $next($request);
         }

    }
}

这是我的内核文件

 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,
        'verifyToken' => \App\Http\Middleware\CheckToken::class,
    ];

我收到此错误

Argument 1 passed to Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() must be an instance of Symfony\Component\HttpFoundation\Response, instance of Illuminate\Http\Request given, called in C:\xampp\htdocs\idoltime\vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php on line 62

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    我面临同样的问题,但在互联网上找不到任何答案。这是我如何解决此问题的解决方案。

    第 1 步:例如创建单独的路线

    Route::get('header_token', function() {
      return response()->json(['status' =>2, 'msg' => 'Unathorized']);
    })->name('header_token');
    

    第 2 步:重定向到 header_token 路由

    请记住,您不能将数据作为响应返回,因此请返回将返回您的数据的路由

    public function handle($request, Closure $next)
    {
    
        if($request->header('Token') == '123')
        {
            return redirect(route('header_token'));
        }
        else
        {
            return $next($request);
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      你可以使用

      // return $request;
      if($request->header('Token') == '123')
      {
              $response = [
                  'status' => 2,
                  'message' => 'Unauthorized',
              ];
      
              return response()->json($response, 413);
      }
      else
      {
              return $next($request);
      }
      

      【讨论】:

      • 你才是王道,这个bug驱使我做的。
      • 谢谢@Foued MOUSSI。这很有帮助
      猜你喜欢
      • 2020-12-19
      • 2020-05-27
      • 2020-02-12
      • 2021-04-29
      • 1970-01-01
      • 2020-02-23
      • 2015-10-16
      • 2022-06-26
      • 1970-01-01
      相关资源
      最近更新 更多