对所有请求进行Laravel身份验证(全局身份验证?)


Laravel auth on all requests (global auth?)

我正在进行一个Laravel项目,该项目仅供后端管理人员使用。因此,没有"标准用户"answers"管理用户"的分离。因此,我想在整个项目中实现某种全局身份验证过滤器。

到目前为止,我所拥有的是app/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路由,我可以从那里登录。登录后,我在hello视图上有一个/logout链接,它也可以工作(即注销)。

上面的代码是我的测试代码。在我正在开发的实际应用程序中(从以前的开发人员那里接管项目),routesapp/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');
});

我的问题是,如何对具有此app/routes.php的请求应用"全局"身份验证?由于实际的应用程序路由代码似乎与我在测试代码中计算出的不同。。

问题#2-查看我的测试代码,有人能告诉我这个过滤器在什么时候执行吗:

Route::filter('auth', function($route, $request) { ... });

这个代码概念取自我正在阅读的教程,但我注意到我的test代码仍然可以很好地工作——即使我删除了这个代码块。因此,我不完全确定上面的代码块是在哪个场景中执行的。

在测试环境中禁用路由过滤器。要启用它们,请将Route::enableFilters()添加到测试中。

要添加全局身份验证过滤器,可以这样做:

Route::get('/login')... //rest of code here
Route::get('logout')... //rest of code here
Route::group(array('before' => 'auth'), function()
{
    Route::controller('dev', 'DevController');
    Route::controller('orders', 'OrdersController');
    ...
    Route::controller('api/notes', 'NotesAPIController');
    Route::get('/', function() {
           return View::make('dashboard');
    });
});