Php 中间件和beforeFilter auth-won';行不通

Php 中间件和beforeFilter auth-won';行不通,php,laravel-5,middleware,Php,Laravel 5,Middleware,我定义了一个资源路由组 Route::group(['prefix' => 'api/v1'], function() { Route::resource('words', 'WordController'); }); 我为所有这些路线创建了一个控制器。我想为所有请求设置基本身份验证,因此我添加了WordController:$this->beforeFilter('auth.basic')但没有效果。我仍然可以得到所有的话没有任何用户名和密码提供。有人知道为什么吗 你可以试试下面

我定义了一个资源路由组

Route::group(['prefix' => 'api/v1'], function() {
  Route::resource('words', 'WordController');
});
我为所有这些路线创建了一个控制器。我想为所有请求设置基本身份验证,因此我添加了
WordController
$this->beforeFilter('auth.basic')但没有效果。我仍然可以得到所有的话没有任何用户名和密码提供。有人知道为什么吗


你可以试试下面的方法。在路由过程中对用户进行身份验证,而不是对控制器进行身份验证

Route::get('home', array('before' => 'auth', 'do' => function()
{
    // your action here
}));


Route::filter('auth',function(){
     if(Auth::guest())
         return Redirect::to('login');

});

如果您使用的是Laravel5,那么可以使用中间件来替换过滤器。使用中间件正在成为装饰路线的首选实践和思考方式。为什么您的代码不工作,因为auth.basic是一种中间件而不是过滤器

由于您使用的是Route::group,所以可以在controller中连接中间件。 请参阅下面的代码,了解如何附加它

Route::group(['prefix' => 'api/v1', 'middleware' => 'auth.basic'], function() {
  Route::resource('words', 'WordController');
});
您可以在上面的代码中看到使用中间件名称“auth.basic”。你是怎么知道中间件的。在使用中间件之前,必须通过在/app/Http/Kernel.php中定义中间件来注册中间件。如果打开该文件,您可以看到下面的代码

/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];
/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];