2015-12-02 70 views
1

我试图在全局中使用Authenticate中间件,除了auth/loginauth/logout,所以我不需要将它添加到每个控制器中。我将它添加到全球中间件列表Kernel(如下所示);然而,它陷入了无限的auth/login重定向。对于任何客人,我希望网页被重定向到auth/login并留在那里。Laravel 5.1:全局使用默认的Auth中间件

class Kernel extends HttpKernel 
{ 
    protected $middleware = [ 
     ... 
     \App\Http\Middleware\Authenticate::class, 
    ]; 
} 

它的发生,因为当它击中auth/login第一次,全球Authenticate踢又一遍地重定向到auth/login一次。

是否可以使用全球为我所描述的默认Authenticate中间件?我需要为它创建一个新的中间件吗?

编辑:我已经得出结论,托马斯的方法是够好的。

回答

3

您可以随时使用Route Groups。在你routes.php文件...

// Your login/logout routes 
Route::get('login', 'Auth\[email protected]'); 
Route::post('login', 'Auth\[email protected]'); 
Route::get('logout', 'Auth\[email protected]'); 

Route::group(['middleware' => 'auth'], function() { 
    // Put all other routes here and the auth middleware will be applied on them all 
}); 

编辑:此外,你不需要到Authenticate中间件添加到全局中间件堆栈。只要将其保留在默认的$routeMiddleware即可。

'auth' => \App\Http\Middleware\Authenticate::class, 
+0

如果使用重路由分组,不需要列出单个路由吗?我正在寻找一种极简方式来分配auth中间件。 – musicliftsme

+0

你是什么意思?无论如何,您必须列出您的路线..您将添加两行代码,以在除登录/注销路线之外的所有路线上应用auth中间件。 –

+0

我的意思是如果我的索引控制器有X个路由,我需要列出分组的X条目,不是吗?我可以在控制器中添加中间件来处理这一行。 – musicliftsme