Защита всех администраторов / маршрутов с помощью auth в Laravel
Я новичок в laravel и настраиваю авторизацию панели администратора в своем первом приложении. Способ установки моих файлов в настоящее время:
controllers/
admin/
dashboard.php
settings.php
non-admin-controller1.php
non-admin-controller1.php
views/
admin/
dashboard.blade.php
login.blade.php
template.blade.php
non-admin-view1.php
non-admin-view1.php
non-admin-view1.php
...а это мои маршруты!--3-->
Route::get('admin/login', function()
{
return View::make('admin.login');
});
Route::get('admin/logout', function()
{
return Auth::logout();
return Redirect::to('admin/login');
});
Route::post('admin/login', function()
{
$userdata = array('username' => Input::get('username'),
'password' => Input::get('password'));
if (Auth::attempt($userdata))
{
return Redirect::to('admin');
}
else
{
return Redirect::to('admin/login')->with('login_errors',true);
}
});
Route::controller('admin.dashboard');
Route::get('admin', array('before' => 'auth', function() {
return Redirect::to_action('admin@dashboard');
}));
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::to('admin/login');
});
когда я иду в / admin, меня перенаправляют в admin / login и просят войти, что именно так мне нужно. При входе в систему я перенаправлен на admin / dashboard, и там все выглядит хорошо. У меня 2 проблемы однако.
когда я иду в admin / logout, я выхожу из системы, но приветствую пустую страницу (это не перенаправление на admin/login)
при выходе из системы, если я иду в admin / dashboard, меня встречает ошибка
представление отрисовки ошибок: [admin.приборная панель]
попытка получить свойство non-object
что я делаю неправильно здесь? Что я делаю правильно? Получится ли? больше смысла создавать отдельный пакет для admin? Спасибо!
3 ответов
таким образом, я смог решить свою проблему немного по-другому. Я создал (базовый) Admin_Controller в корне папки controllers, с конструктором, вызывающим фильтр auth перед выполнением:
class Admin_Controller extends Base_Controller {
public function __construct()
{
$this->filter('before', 'auth');
}
}
а затем сделал все мои связанные с администратором контроллеры в/controllers / admin extend Admin_Controller и вызвать родительский конструктор:
class Admin_Dashboard_Controller extends Admin_Controller {
public function __construct()
{
parent::__construct();
}
public function action_index()
{
return View::make('admin.dashboard');
}
}
это может быть не самое красноречивое решение, но оно делает свою работу!
в своем admin/login
маршрут у вас есть ненужные возврата до Auth::logout()
call, nuke, и он должен это исправить.
еще одна проблема заключается в том, что фильтруется только один маршрут "admin". Вы можете обернуть все ваши маршруты администратора с помощью Route::group()
и применить "auth" перед фильтром или вы можете использовать Route::filter('pattern: admin/*', 'auth')
тоже.
проверить:
http://laravel.com/docs/routing#filters
для второго вопроса, ваш администратор Класс контроллера панели мониторинга Admin_Dashboard_Controller
и если да, то у вас есть функция action_index() или get_index (), возвращающая представление?
проверить:
http://laravel.com/docs/controllers#nested-controllers
(Я предполагаю, что вы используете L3 здесь кстати.)
для будущих читателей, очень чистый способ справиться с этим, используя фреймворк Laravel по Группы По Маршруту:
группы маршрутов позволяют совместно использовать атрибуты маршрута, такие как промежуточное ПО или пространства имен, на большом количестве маршрутов без необходимости определять эти атрибуты на каждом отдельном маршруте.
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
// Uses Auth Middleware
});
Route::get('user/profile', function () {
// Uses Auth Middleware
});
});
их можно использовать не только для аутентификации, но и Namespaces
, Sub-Domains
и многое другое.