Я использую Сентинел — https://github.com/rydurham/Sentinel — чтобы обработать аутентификацию пользователя для моего приложения, и иметь весь поддомен ‘admin’ в маршрутизации.
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»?
Фильтр авторизации Sentinel:
Route::filter('Sentinel\auth', function()
{
if (!Sentry::check()) return Redirect::guest(Config::get('Sentinel::config.routes.login'));
});
…и config.routes.login установлен в «логин».
Я понимаю сходство этого вопроса — Цикл перенаправления в Laravel — но меня смущает работа локально / сломанная развернутая.
Вид решил это. Как и указывалось в ссылке, самый простой (самый хакерский) способ — удалить корневой, эрм, маршрут из группы аутентификации:
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');
});
});
Я уверен, что есть более элегантные решения, но я оставляю это здесь на всякий случай.
Других решений пока нет …