【问题标题】:Apply filter to all routes except two?将过滤器应用于除两条以外的所有路线?
【发布时间】:2015-11-13 23:38:11
【问题描述】:

有没有办法可以将过滤器(特别是“auth”)应用于所有路由除了“login”和“sessions.store”?

pattern based filters 上有一小部分,但我不知道如何否定它们。

像 ASP.NET MVC 的 AllowAnonymous 这样的东西会很好。

【问题讨论】:

    标签: laravel laravel-4


    【解决方案1】:

    是的 - 像这样使用route groups

    routes.php

    // Not logged in area
    Route::get('/login', ['as' => 'login', 'uses' => 'AuthController@getLogin']);
    Route::get('/session', ['as' => 'session.store', 'uses' => 'AuthController@sessionStore']);
    
    
    // Logged in area
    Route::group(['before' => 'auth'], function ()
    {
         Route::get('/dashboard', ['as' => 'dashboard', 'uses' => 'DashboardController@index']);
         // Rest of your routes here
    }
    

    或者还有其他一些选择。你可以创建一个class based filter,然后做这样的事情(半伪代码,我没有测试过,但你明白了

    class AdminFilter {
    
          public function filter()
          {
             if ( ! ((Route::getCurrentRoute() == 'login') || Route::getCurrentRoute() == 'session.store')))
             {
                 // If the route is not login or session.store, then run the auth check
                 if (Auth::guest()) return Redirect::guest('login');
             }  
    
             return true;
          }
     }
    

    编辑:使用您对 AllowAnonymous 之类的请求 - 您也可以做一些事情 like this in your base Controller

    public function __construct()
        {
            $this->beforeFilter('auth', array('except' => array('login', 'sessions.store')));
        }
    

    然后您的所有控制器“扩展”基本控制器。这意味着所有路由(使用控制器)都会自动应用身份验证过滤器。

    【讨论】:

      【解决方案2】:

      app/filters.php 文件中,有一个过滤器,该过滤器附带了股票 laravel 具有:

      App::before(function($request)
      {
      
      });
      

      您可以使用它来检查您的某些页面,如果一切正常,则让它通过,如果没有,则重定向到登录。

      【讨论】:

        猜你喜欢
        • 2019-04-23
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        • 2020-11-13
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        相关资源
        最近更新 更多