Laravel 5.1:全局使用默认的Auth中间件
问题描述:
我试图在全局中使用Authenticate
中间件,除了auth/login
和auth/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
中间件?我需要为它创建一个新的中间件吗?
编辑:我已经得出结论,托马斯的方法是够好的。
答
您可以随时使用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,
如果使用重路由分组,不需要列出单个路由吗?我正在寻找一种极简方式来分配auth中间件。 – musicliftsme
你是什么意思?无论如何,您必须列出您的路线..您将添加两行代码,以在除登录/注销路线之外的所有路线上应用auth中间件。 –
我的意思是如果我的索引控制器有X个路由,我需要列出分组的X条目,不是吗?我可以在控制器中添加中间件来处理这一行。 – musicliftsme