2017-01-13 4 views
0

Я использую Laravel 5.3, и у меня есть следующая проблема.Проверка авторизации пользователя во всех действиях контроллеров

[UPDATE]

Моя первая беда была появление ошибки при выполнении действий на сайте, когда пользователь не вошел в систему.

Это произошло при запуске браузера, где по умолчанию на странице отображается кешированная информация. Интерфейс сайта отображается для зарегистрированных пользователей, а в его системе не было. В то же время, производя некоторые действия, я получаю сообщение об ошибке, когда пользователь не авторизовался.

У меня также есть групповое промежуточное ПО для всех моих маршрутов. Когда я перезагружаю страницу сайта, промежуточное программное обеспечение активируется и перенаправляется на страницу входа. Основная проблема заключается в том, что браузер показывает кэшированную информацию.

Итак, в дополнение к промежуточному программному обеспечению для маршрутов я решил сделать проверку подлинности в контроллерах.

[/ UPDATE]

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

Так что я решил сделать это по всему миру. не

Поскольку все контроллеры распространяется Главный контроллер (App \ Http \ Контроллеры \ controller.php), я решил написать AUTH() -> проверка() в конструкторе:

function __construct() 
{ 
    if(auth()->check()) dd('success'); 
} 

Но ... ничего случилось (((Тогда я нашел метод CallAction в BaseController, который проходит Главный контроллер и сделал отметку здесь:

public function callAction($method, $parameters) 
{ 
    if(auth()->check()) dd('success'); 
    return call_user_func_array([$this, $method], $parameters); 
} 

на этот раз все в порядке, но мне не нравится это решение, потому что редактирование файлов ядра не

Наконец, я обновил метод callAction в Main Controller с проверкой подлинности, но мне тоже не нравится.

Есть ли решение?

+0

Что об использовании промежуточного ПО? – CUGreen

+0

Я пробовал этот путь, но это не сработало для меня (ничего не случилось. –

+0

Просто следуйте [этому ответу] (http://stackoverflow.com/questions/13745897/laravel-auth-check-for-all-pages) –

ответ

0

если есть группа маршрутов это было бы самым простым способом

Route::group(['middleware' => ['auth']], function() 
{ 
    // here all of the routes that requires auth to be checked like this 
    Route::resource('user','UsersController'); 
} 

еще способы

function __construct() 
{ 
    $this->middleware('auth'); 
} 

другой путь указан на контроллере маршрутов

Route::get('profile', [ 
    'middleware' => 'auth', 
    'uses' => '[email protected]' 
]); 

в документации

https://laravel.com/docs/5.0/controllers#controller-middleware

1

Вы должны использовать middleware:

Route::get('profile', ['middleware' => 'auth', 'uses' => '[email protected]']); 

Или:

Route::get('profile', '[email protected]')->middleware('auth'); 

Или с помощью middleware groups:

Route::group(['middleware' => ['auth']], function() { 
    // Controllers here. 
}); 

Или с помощью controller's construct:

public function __construct() 
{ 
    $this->middleware('auth'); 
} 
+0

У меня есть более 50 маршрутов, включая ajax-запросы. Это не решение переписать каждый маршрут ... –

+0

@PaulBasenko использует [группы промежуточного программного обеспечения] (https://laravel.com/docs/5.3/middleware#middleware-groups) для этого. Это третий вариант в моем ответе. –

+0

Что касается группового маршрута, я уже использовал его. Как я уже сказал, мне нужна проверка подлинности в действии контроллера, а не на маршрутах. –