Я использую laravel для своего веб-приложения и в routes.php У меня есть:
// admin routes Route::group(array('before' => 'auth'), function() { Route::controller('admin', 'UsersController'); });
Я хочу защитить и проверить, зарегистрирован ли пользователь, но этот код всегда перенаправляется на «/ login», я хочу, чтобы он перенаправлялся на «admin / login», это можно сделать?
В файле filters.php
фильтр auth
умолчанию, он должен выглядеть следующим образом:
Route::filter('auth', function($route, $request) { if (Auth::guest()) return Redirect::guest('login'); // /login url });
Этот фильтр (приведенный выше) будет проверять, не будет ли пользователь входить в систему, тогда произойдет перенаправление, и пользователь будет отправлен на /login
url
и в противном случае ничего не произойдет, пользователь будет отправлен на запрашиваемую страницу.
Кроме того, по умолчанию доступен следующий filter
, и этот filter
просто проверяет, был ли пользователь уже зарегистрирован, тогда он будет перенаправлен на /
(домашняя страница) по умолчанию:
Route::filter('guest', function($route) { if (Auth::check()) return Redirect::to('/'); // you may change it to /admin or so });
Этот ( guest
) фильтр используется с /login
как указано ниже, поэтому, если зарегистрированный пользователь должен войти в систему, тогда пользователь будет перенаправлен на домашнюю страницу по умолчанию:
Route::get('login', array('before' => 'guest', 'uses' => 'UsersController@getLogin'));
Теперь, в вашем файле routes.php
вы routes.php
следующий маршрут:
Route::group(array('before' => 'auth'), function() { Route::controller('admin', 'UsersController'); });
Если все в порядке, то эта настройка должна работать. Если пользователь, выйдя из системы, пытается посетить admin
тогда пользователь будет отправлен для login
в login
и они по умолчанию доступны и должны работать.
Да. Добавьте следующий фильтр:
Route::filter('auth.admin', function() { if (Auth::guest()) return Redirect::guest('admin/login'); });
Я скопировал оригинальный фильтр auth
поставляемый с Laravel.
Затем используйте новый фильтр:
Route::group(array('before' => 'auth.admin'), function() { Route::controller('admin', 'UsersController'); });
Полное решение:
Route::filter('auth.admin', function() { // if not logged in redirect to the login page if (Auth::guest()) return Redirect::guest('admin/login'); }); Route::filter('auth.login', function() { // if already logged in don't show login page again if (Auth::check()) return Redirect::to('admin'); }); Route::get('admin/login', ['before' => 'auth.login', 'uses' => 'UsersController@getLogin']); Route::group(['before' => 'auth.admin'], function () { Route::controller('admin', 'UsersController'); });