【问题标题】:ReflectionException - Middleware class does not exist Laravel 5.2ReflectionException - 中间件类不存在 Laravel 5.2
【发布时间】:2016-06-01 12:38:51
【问题描述】:

我正在 Laravel 5.2 中构建一个具有无状态 HTTP 基本身份验证的 API,根据文档 Stateless HTTP Basic Authentication ,我创建了以下中间件

app/Http/Middleware/AuthenticateOnceWithBasicAuth.php

<?php

namespace Illuminate\Auth\Middleware;

use Auth;
use Closure;

class AuthenticateOnceWithBasicAuth
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */

    public function handle($request, Closure $next)
    {
        return Auth::onceBasic() ?: $next($request);

    }

}

然后在Kernel.php中注册

app/Http/kernel.php

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'auth.basic.once' => \App\Http\Middleware\AuthenticateOnceWithBasicAuth::class,
];

我在路由中使用如下

Route::group(['prefix' => 'admin', 'middleware' => 'auth.basic.once'], function () {

Route::get('service/create', function ()    {
    return response()->json(['name' => 'Abigail', 'state' => 'CA'], 200);
});

});

但它给了我

Container.php 第 734 行中的反射异常: 类 App\Http\Middleware\AuthenticateOnceWithBasicAuth 不存在

我已经运行了以下命令,但没有成功

composer dump-autoload
php artisan clear-compiled
php artisan optimize 

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 在终端中,运行“composer dump-auto”和“php artisan clear-compiled”。那应该可以解决它。
  • @IllegalPigeon 已经试过了

标签: laravel laravel-5 laravel-5.1 laravel-5.2 middleware


【解决方案1】:

首先看看命名空间:

namespace Illuminate\Auth\Middleware;

你应该把它重命名为:

namespace App\Http\Middleware;

在中间件中你需要做这样的事情:

public function handle($request, Closure $next) {
   if (!Auth::onceBasic()) {
        if ($request->ajax() || $request->wantsJson()) {
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('login');
        }
    }

    return $next($request);
}

【讨论】:

  • 在这种情况下,它会创建一个 cookie laravel_session 和 XSRF-TOKEN。这与使用基本身份验证相同。
  • 不知道你想得到什么,但我想也许:返回Auth::onceBasic() ? $request : $next($request);尝试$request成功返回。
  • 我想在会话中不设置用户标识符cookie的情况下实现HTTP基本身份验证
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 2015-12-05
  • 2014-01-24
  • 2022-10-25
  • 2016-12-27
相关资源
最近更新 更多