【问题标题】:Middleware and beforeFilter auth won't work中间件和 beforeFilter 身份验证不起作用
【发布时间】:2015-04-14 12:20:59
【问题描述】:

我定义了一个资源路由组

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())
        ]);
    }
}

【问题讨论】:

    标签: php laravel-5 middleware


    【解决方案1】:

    如果您使用的是 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',
    ];
    

    【讨论】:

      【解决方案2】:

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

      Route::get('home', array('before' => 'auth', 'do' => function()
      {
          // your action here
      }));
      
      
      Route::filter('auth',function(){
           if(Auth::guest())
               return Redirect::to('login');
      
      });
      

      【讨论】:

        猜你喜欢
        • 2014-10-18
        • 2020-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        相关资源
        最近更新 更多