Я работаю над проектом Laravel, который предназначен только для использования администратором бэкэнда администратора. Таким образом, нет разделения «стандартного пользователя» и «администратора пользователя». Итак, я хочу реализовать какой-то глобальный фильтр auth для всего проекта.Laravel auth по всем запросам (глобальный auth?)
То, что я до сих пор это на по приложение/routes.php
<?php
// Home route with login required
Route::get('/', array('as' => 'home', function() {
return View::make('hello');
}))->before('auth');
/*
* Global Auth Filter - All Guests Go To Login
*/
Route::filter('auth', function($route, $request) {
if (Auth::guest())
return Redirect::guest('login')
->with('login_error', 'Login required!');
});
/*
* Login Route Handler
*/
Route::get('login', array('as' => 'login', function() {
if (Auth::check())
return Redirect::route('home');
return View::make('login');
}))->before('guest');
/*
* Login Post Event Handler
*/
Route::post('login', function()
{
// Parse form data
$user = array(
'username' => Input::get('username'),
'password' => Input::get('password')
);
// Try to login user
if (Auth::attempt($user))
{
// login success
return Redirect::route('home');
}
else
{
// Login error
return Redirect::route('login')
->withInput()
->with('login_error', 'Invalid username and/or password!');
}
});
/*
* Logout Route Handler
*/
Route::get('logout', array('as' => 'logout', function() {
Session::flush();
return Redirect::route('home');
}))->before('auth');
Это прекрасно работает. Если я попал на страницу /
, он перенаправляет меня на маршрут /login
, и оттуда я могу войти в систему. После входа в систему у меня есть ссылка /logout
на вид hello
, и это также работает (т. Е. Выходит из системы).
Этот код, приведенный выше, является моим тестовым кодом. В реальном приложении я работаю (с над проектом от предыдущего разработчика), маршруты приложение/routes.php настроены так:
<?php
Route::controller('dev', 'DevController');
Route::controller('orders', 'OrdersController');
Route::controller('customers', 'CustomersController');
Route::controller('picking', 'PickingController');
Route::controller('stock', 'StockController');
Route::controller('suppliers', 'SuppliersController');
Route::controller('warehouse', 'WarehouseController');
Route::controller('upload', 'UploadController');
Route::controller('apixero', 'XeroController');
Route::controller('api/orders', 'OrdersAPIController');
Route::controller('api/picking', 'PickingAPIController');
Route::controller('api/po', 'PurchaseOrdersAPIController');
Route::controller('api/products', 'ProductsAPIController');
Route::controller('api/customer', 'CustomerAPIController');
Route::controller('api/suppliers', 'SuppliersAPIController');
Route::controller('api/currency', 'CurrencyAPIController');
Route::controller('api/notes', 'NotesAPIController');
Route::get('/', function() {
return View::make('dashboard');
});
Мой вопрос # 1 это, как я применить «глобальный» запрос на запросы с этим app/routes.php
? Поскольку реальный код маршрутов приложений, похоже, отличается от того, что я разработал в своем тестовом коде.
Вопрос # 2 - Посмотрите на мой тестовый код, может кто-то сказать мне, в какой момент этот фильтр запускается:
Route::filter('auth', function($route, $request) { ... });
Эта концепция кода была заимствована из учебника я читал, но я заметил, что мой test
код продолжает работать нормально - даже если я удалю этот блок кода. Таким образом, я не совсем уверен, в каком сценарии выполняется выполнение кода.
Спасибо, просто проверил это и работает, как ожидалось. Вот работающий 'routes.php' для меня http://pastebin.com/b7BdX4kv – Latheesan