有没有办法可以将过滤器(特别是“auth”)应用到除“login”和“sessions.store”之外的所有路径?
pattern based filters上有一小段,但我不知道如何否定它们。
像ASP.NET MVC的AllowAnonymous之类的东西会很好。
答案 0 :(得分:3)
是的 - 只需像这样使用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,然后做这样的事情(半pseducode,我还没有测试过,但是你明白了)
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')));
}
然后所有控制器都“扩展”基本控制器。这意味着所有路径(使用控制器)都会自动应用auth过滤器。
答案 1 :(得分:2)
在app/filters.php
文件中,有一个过滤器附带了库存laravel:
App::before(function($request)
{
});
您可以使用它来检查您的某些页面,如果一切正常,请将其通过,如果没有,则重定向到登录。