3

我正在使用 Sentinel - https://github.com/rydurham/Sentinel - 来处理我的应用程序的用户身份验证,并将 routes.php 中的整个“管理”子域包裹起来,如下所示:

Route::group([ "domain" => 'app.domain.dev', 'before' => 'Sentinel\auth' ], function()
{
    Route::group(array('prefix' => 'one'), function()
    {
        ...
    });

    Route::group(array('prefix' => 'two'), function()
    {
        ...
    });

    Route::get('/', array('as' => 'home', 'uses' => 'DashboardController@index'));
});

在本地计算机上,一切正常 - app.domain.dev 如果登录则显示管理仪表板,如果未登录则显示登录页面,而注销则将用户返回到登录页面。

然而,一旦通过 Forge 部署,app.domain.dev 如果没有登录就会导致无限循环错误。然而 /login 仍然可以访问和工作——一旦登录,仪表板就可以正常加载。如果用户注销,他们会再次遇到无限循环错误。

我不确定为什么这在本地工作而不是部署,但我猜这与位于“Sentinel\auth”过滤组内的“home”路由有关?

Sentinel 的身份验证过滤器:

Route::filter('Sentinel\auth', function()
{
    if (!Sentry::check()) return Redirect::guest(Config::get('Sentinel::config.routes.login'));
});

...并且 config.routes.login 设置为“登录”。

我理解这个问题的相似之处——laravel 中的重定向循环——但让我感到困惑的是本地工作/损坏的部署。

4

1 回答 1

1

有点解决了。正如链接所建议的,最简单(hackiest)的方法是从 auth 组中删除根、erm、路由:

Route::group([ "domain" => 'app.domain.dev' ], function()
{
    Route::group([ 'before' => 'Sentinel\auth' ], function()
    {
        Route::group(array('prefix' => 'one'), function()
        {
            ...
        });

        Route::group(array('prefix' => 'two'), function()
        {
            ...
        });

        Route::get('dashboard', array('as' => 'home', 'uses' => 'DashboardController@index'));
    });

    Route::get('/', function()
    {
        if(!Sentry::check()) return Redirect::to('login');
        elseif(Sentry::check()) return Redirect::to('dashboard');
    });
});

我确信有更优雅的解决方案,但我将其留在这里以防万一。

于 2014-11-25T23:54:31.787 回答