【问题标题】:Laravel 5.1: using default Auth middleware globallyLaravel 5.1:全局使用默认的 Auth 中间件
【发布时间】:2016-03-07 06:21:44
【问题描述】:

我正在尝试在全局范围内使用开箱即用的 Authenticate 中间件,auth/loginauth/logout 除外,因此我不需要在每个控制器中添加它。我将其添加到Kernel中的全局中间件列表中(如下图);但是,它陷入了无限的auth/login 重定向。对于任何客人,我希望将页面重定向到auth/login 并留在那里。

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

发生这种情况是因为当它第一次点击auth/login 时,全局Authenticate 开始并一遍又一遍地重定向到auth/login

是否可以像我描述的那样在全局范围内使用默认的 Authenticate 中间件?我需要为它创建一个新的中间件吗?

编辑:我已经得出结论,Thomas 的方法已经足够好了。

【问题讨论】:

    标签: laravel authentication laravel-5.1 middleware


    【解决方案1】:

    您始终可以使用Route Groups。在您的routes.php 文件中...

    // Your login/logout routes
    Route::get('login', 'Auth\AuthController@getLogin');
    Route::post('login', 'Auth\AuthController@postLogin');
    Route::get('logout', 'Auth\AuthController@getLogout');
    
    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,
    

    【讨论】:

    • 如果使用reroute-grouping,我不需要列出单独的路由吗?我正在寻找一种极简主义的方法来分配身份验证中间件。
    • 什么意思?无论如何,您都必须列出您的路线。您要添加两行代码以将身份验证中间件应用于除登录/注销路线之外的所有路线。
    • 我的意思是,如果我的索引控制器有 X 个路由,我需要列出 X 个分组条目,不是吗?我可以在控制器中添加中间件,以便在一行中解决这个问题。
    • @musicliftsme 仍然不明白你的意思。如果您没有在您的路线文件中列出它们,您将如何访问这些路线?您的路线文件应该已经列出了所有路线。现在,您只需将它们放入路由组中。字面意思就是这样。 2行代码。这种方式也应该更容易,因为现在您不需要在任何控制器上添加构造函数。它由路由组处理。
    • 哦,我的错!我再次检查了文档,我误解了。是的,您的答案有效;我以为我必须再次单独注册路由并将中间件分组。不过,我最初的部分问题仍未得到解答,在那里我得到了无限重定向。
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2016-05-12
    • 2018-09-03
    • 2016-02-02
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多