0

Я использую каркас Laravel 4 со стандартной встроенной поддержкой Auth. В локальной среде все работает хорошо (MAMP, OSx), но на моем производственном сервере (Digital Ocean standard image с Ubuntu, Apache, Php 5.5.9) автозавершение фильтра завершается с ошибкой и разрешает доступ без аутентификации.Ошибка фильтра Laravel на производственном сервере

routes.php:

Route::group(['before'=>'auth'], function(){ 
    Route::get('admin', array('uses' => '[email protected]')); 
    Route::get('admin/dashboard', function(){ 
     return Redirect::to('admin'); 
    }); 

    Route::post('payment/ok', array('uses' => '[email protected]')); 
    Route::post('payment/fail', array('uses' => '[email protected]')); 
    Route::get('admin/makeDMS/{id}', array('uses' => '[email protected]')); 
    Route::get('admin/products', array('uses' => '[email protected]')); 
    Route::get('admin/product/{id}', array('uses' => '[email protected]')); 
    Route::get('admin/orders', array('uses' => '[email protected]')); 
    Route::get('admin/order/{id}', array('uses' => '[email protected]')); 
    Route::post('admin/setOrderStatus', array('uses' => '[email protected]')); 
    Route::post('admin/updateProduct', array('uses' => '[email protected]')); 
    Route::get('admin/transactions', array('uses' => '[email protected]')); 
}); 

filters.php:

Route::filter('auth', function() 
{ 
    if (Auth::guest()) 
    { 
     if (Request::ajax()) 
     { 
      return Response::make('Unauthorized', 401); 
     } 
     else 
     { 
      return Redirect::guest('login'); 
     } 
    } 
}); 


Route::filter('auth.basic', function() 
{ 
    return Auth::basic(); 
}); 

Route::filter('guest', function() 
{ 
    if (Auth::check()) return Redirect::to('/'); 
}); 

Я пытался защитить желаемые маршруты как с Route::group и в конструкторе контроллера, но вывод тот же: войти с хорошим учетные данные работают, пользователи с плохими учетными данными не могут войти в систему, но группа маршрутов, которая должна быть защищена, доступна для пользователей, не прошедших проверку подлинности.

Я обнаружил, что PHP в быстром режиме CGI может производить такое поведение, но вот мой sudo apachectl -M выход:

Loaded Modules: 
core_module (static) 
so_module (static) 
watchdog_module (static) 
http_module (static) 
log_config_module (static) 
logio_module (static) 
version_module (static) 
unixd_module (static) 
access_compat_module (shared) 
alias_module (shared) 
auth_basic_module (shared) 
authn_core_module (shared) 
authn_file_module (shared) 
authz_core_module (shared) 
authz_host_module (shared) 
authz_user_module (shared) 
autoindex_module (shared) 
deflate_module (shared) 
dir_module (shared) 
env_module (shared) 
filter_module (shared) 
mime_module (shared) 
mpm_prefork_module (shared) 
negotiation_module (shared) 
php5_module (shared) 
rewrite_module (shared) 
setenvif_module (shared) 
status_module (shared) 

ответ

1

Хорошо, я нашел решение. Как всегда, RTM ...

Моя среда была установлена ​​как «тестирование», которая зарезервирована для модульного тестирования, а manual красиво говорит:

Примечание: фильтры маршрута отключены, когда в среде тестирования. К включите их, добавьте Route :: enableFilters() в свой тест.

Я изменил переменную окружения на «производство», и теперь все работает отлично.

Смежные вопросы