中间件和beforeFilter auth将无法正常工作

时间:2015-04-14 12:21:00

标签: php laravel-5 middleware

我定义了资源路由组

Route::group(['prefix' => 'api/v1'], function() {
  Route::resource('words', 'WordController');
});

我为所有路线创建了一个控制器。我想为所有请求设置基本身份验证,因此我添加到WordController的构造函数:$this->beforeFilter('auth.basic');但是没有效果。我仍然可以在没有提供任何用户名和密码的情有人知道为什么吗?

class WordController extends ApiController {

    protected $wordTransformer;

    function __construct(WordTransformer $wordTransformer)
    {
        $this->wordTransformer = $wordTransformer;

        $this->beforeFilter('auth.basic');
        //$this->middleware('auth.basic');

    }

    public function index()
    {
        $words = Word::all();
        return $this->respond([
            'words' => $this->wordTransformer->transformCollection($words->all())
        ]);
    }
}

2 个答案:

答案 0 :(得分:2)

如果您使用的是laravel 5,则可以使用替换过滤器的中间件。使用中间件正成为装饰路线的首选实践和思路。为什么你的代码不能正常工作,因为auth.basic是一种不过滤的中间件。

您可以在控制器中附加中间件,因为您正在使用Route :: group。 请参阅下面的代码如何附加它。

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',
];

答案 1 :(得分:0)

您可以尝试以下内容。在路由期间验证用户而不是控制器。

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


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

});