2015-05-20 114 views
0

我有一個相當複雜的應用程序,它使用自定義身份驗證中間件。我有一個路由組是這樣的:Laravel嵌套路由組逆中間件

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

    Route::get('/', function() { 

     echo 'private'; 
    }); 

    Route::group(['prefix' => 'public'], function() { 

     Route::get('/', function() { 

      echo 'public'; 
     }); 
    }) 
}); 

現在auth中間件將重定向未經過身份驗證的所有請求。帶有auth前綴的主羣組已通過身份驗證。但是,即使用戶未通過身份驗證,我也希望組public可以訪問。

所以:

http://example.com/auth < must be authenticated 
http://example.com/auth/some-sub-page < must be authenticated 
http://example.com/auth/public < no need for authentication 

那麼,有沒有辦法像'remove-middleware' => 'auth'添加到嵌套組與public前綴?或者我會不得不重組我的路線組?

回答

0

爲什麼不只是將auth中間件包裝在非公共路線周圍?

Route::group(['prefix' => 'auth'], function() { 

    // routes requiring auth 
    Route::group(['middleware' => 'auth']) { 

     Route::get('/', function() { 

      echo 'private'; 
     }); 

    } 

    // other routes 
    Route::group(['prefix' => 'public'], function() { 

     Route::get('/', function() { 

      echo 'public'; 
     }); 

    }); 
}); 

可能有辦法做'刪除中間件'類型的中間件,但這可能會變得混亂。這似乎是最乾淨的解決方案。