Intereting Posts
DOMDocument удаляет теги сценариев из источника HTML PHPMailer – gmail smtp не работает должным образом Замените конкретный цвет RGB другим изображением, используя PHP Как вы определяете страну посетителя сайта (в частности, США или нет)? Symfony2 – Doctrine2 QueryBuilder ГДЕ В поле ManyToMany Преобразовать строки таблицы HTML в массив PHP и сохранить их в базе данных? Извлечение данных сайта через веб-искатель выводит ошибку из-за неправильного совпадения индекса массива Получить ограниченное слово строки Параметр времени часового пояса для строки (имя часового пояса) (facebook api) Zend Framework: могу ли я просто получить параметры GET? Получение ошибки задания cron из-за тега <? Php как сделать bbcode для анализа URL-адресов в ссылках? Добавление результатов базы данных в массив Как сделать замену только на некотируемые части строки? PHP Dom Удалить элемент оставить содержание

Защита всех админов / маршрутов с помощью 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 

… и это мои маршруты

 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 / dashboard, и все выглядит хорошо там. Однако у меня есть 2 проблемы.

  1. Когда я перехожу к администратору / logout, я выхожу из системы, но приветствую пустую страницу (это не перенаправление на admin / login)

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

Просмотр рендеринга ошибок: [admin.dashboard]

Попытка получить свойство не объекта

Что я здесь делаю неправильно? Что я делаю правильно? Будет ли смысл создавать отдельный пул для администратора? Благодаря!

Поэтому я смог решить свою проблему несколько иначе. Я создал (базовый) Admin_Controller в корневой папке контроллеров с конструктором, вызывающим фильтр авторизации перед выполнением:

 class Admin_Controller extends Base_Controller { public function __construct() { $this->filter('before', 'auth'); } } 

а затем все мои контроллеры, связанные с администратором, в / controller / admin расширяют 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() , nuke, и он должен его исправить.

Еще одна проблема заключается в том, что только ваш «админ» маршрут фильтруется. Вы можете перенести все свои маршруты администратора с помощью Route::group() и применить «auth» перед фильтром, или вы можете использовать Route::filter('pattern: admin/*', 'auth') .

Проверять, выписываться:

http://laravel.com/docs/routing#filters

Для второй проблемы – ваш класс контроллера панели администратора Admin с именем Admin_Dashboard_Controller и если да, то у вас есть функция action_index () или get_index (), возвращающая представление?

Проверять, выписываться:

http://laravel.com/docs/controllers#nested-controllers

(Я предполагаю, что вы используете L3 здесь, btw.)

Для будущих читателей очень простой способ справиться с этим – использовать группы маршрутов Laravel:

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

 Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // Uses Auth Middleware }); Route::get('user/profile', function () { // Uses Auth Middleware }); }); 

Они могут использоваться не только для аутентификации, но также для Namespaces , Sub-Domains и т. Д.