2016-07-19 3 views
0

У меня есть этот laraval 5 приложение. Есть два контроллера: Index и Home. В индексе у меня есть страницы, видимые для пользователей, которые еще не вошли в систему. Когда пользователь входит в систему, он переходит к домашнему контроллеру. Конечно, я хочу, чтобы посетитель не мог просматривать маршруты под домашним контроллером. Итак, я поставил чек внутри конструктора для дома. Но он перенаправляет обратно на индекс и, похоже, не совсем правильный. Так, имеющих эту группу маршрутов:Laravel 5 запретить маршрут для не зарегистрированных пользователей

Route::group(['prefix' => '/home'], function() { 
    Route::auth(); 
    Route::get('index', '[email protected]'); 
    Route::get('logout', '[email protected]'); 
}); 

Как вы можете видеть, я добавил

Route::auth(); 

, который я думал, что должен суметь отказать в доступе для посетителей, которые не вошли в Но это не так. правда. Дом по-прежнему доступен для пользователей, которые еще не вошли в систему.

Каков способ непосредственно описать внутри route.php, что куча маршрутов (внутри группы, я думаю), должна сначала пройти аутентификацию перед тем, как обслуживать маршрут?

ответ

1

Вы используете этот код в своем контроллере?

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

    } 
2

Вы должны добавить auth промежуточное программное обеспечение для защиты вашей home группы:

Route::auth(); 

Route::group(['middleware' => 'auth'], function() { 
    Route::group(['prefix' => '/home'], function() { 
     Route::get('index', '[email protected]'); 
     Route::get('logout', '[email protected]'); 
    }); 
}); 

Вы можете посмотреть на это: https://laravel.com/docs/5.2/authentication#protecting-routes

1

Ее очень просто в Laravel Единственное, что вы должны использовать является одним Middleware

см. это DOC

EX:.

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

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

Если у вас есть несколько маршрутов для защиты от не-аутентификации пользователей, а затем использовать маршрутную группу,

Route::group(['prefix' => '/home', 'middleware' => ['auth']], function() 
{ 
    // user need to logged in order to access these routes 
    Route::get('/', function() 
    { 

    }); 
}); 
0
  1. В kernal.php добавить 'auth' => 'MyespaceAdmin \ Http \ Middleware \ Authenticate' в $ routeMiddleware.
  2. Authenticate.php в каталоге промежуточного программного обеспечения для проверки кода ниже.

    if ($this->auth->guest()) { 
        if ($request->ajax()) { 
         return response('Unauthorized.', 401); 
        } else { 
         return redirect()->guest('your login page url'); 
        } 
    } 
    
  3. Затем с помощью промежуточного авторизацию в маршрутах или в контроллере