我正在使用Sentinel - https://github.com/rydurham/Sentinel - 来处理我的应用程序的用户身份验证,并将整个"admin"子域包含在路由中.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"过滤组中的"家"路由有关?
哨兵的身份验证过滤器:
Route::filter('Sentinel'auth', function()
{
if (!Sentry::check()) return Redirect::guest(Config::get('Sentinel::config.routes.login'));
});
。config.routes.login 设置为"login"。
我理解这个问题的相似之处 - 在 laravel 中重定向循环 - 但让我感到困惑的是本地工作/中断部署。
有点解决了。正如链接所建议的,最简单(最黑客)的方法是从身份验证组中删除根 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');
});
});
我相信有更优雅的解决方案,但我把它留在这里以防万一。