【发布时间】:2015-11-13 23:38:11
【问题描述】:
有没有办法可以将过滤器(特别是“auth”)应用于所有路由除了“login”和“sessions.store”?
pattern based filters 上有一小部分,但我不知道如何否定它们。
像 ASP.NET MVC 的 AllowAnonymous 这样的东西会很好。
【问题讨论】:
有没有办法可以将过滤器(特别是“auth”)应用于所有路由除了“login”和“sessions.store”?
pattern based filters 上有一小部分,但我不知道如何否定它们。
像 ASP.NET MVC 的 AllowAnonymous 这样的东西会很好。
【问题讨论】:
是的 - 像这样使用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')));
}
然后您的所有控制器“扩展”基本控制器。这意味着所有路由(使用控制器)都会自动应用身份验证过滤器。
【讨论】:
在 app/filters.php 文件中,有一个过滤器,该过滤器附带了股票 laravel 具有:
App::before(function($request)
{
});
您可以使用它来检查您的某些页面,如果一切正常,则让它通过,如果没有,则重定向到登录。
【讨论】: