middleware 中介層

中介層你可以想像是一個關卡,只有合乎標準才可以進入。

插入新Route測試

我們加上一個新的Route Function程式碼,插入middleware中

Route::group(['middleware' => 'web'], function () {
    Route::auth();
    Route::get('/', function () {
        return view('welcome');
    });
    //新的進入頁
    Route::get('access', function (){
        echo "你進來囉!";
    });

    Route::get('/home', 'HomeController@index');
});

這時我們登出後,前往 http://localhost:8000/access

可以看到

你進來囉!

確認授權

這不是我們要的,沒有登入就應該轉到登入頁。

我們修改Route.php

Route::get('access', function (){
        echo "你進來囉!";
        //先進行身分判斷
    })->middleware('auth');

這時進入 http://localhost:8000/access

會被導到登入頁,請求登入。

login

現在我們登入後,再前往 http://localhost:8000/access

就可以看到

你進來囉!

說明

我們可以了解這是經過->middleware('auth');的判斷才有的,

但是為何Route::get('/home', 'HomeController@index');
也有一樣的效果呢?

我們進入HomeController.php可以看到,原來他在建構子內就有預設判斷了

public function __construct()
    {
        $this->middleware('auth');
    }

好 , 那麼這個 middleware('auth'); 是甚麼?

其實是在 Route.php 同一層資料夾裡的 kernel.php 去做定義的。(kernel說明)

'auth' => \App\Http\Middleware\Authenticate::class,

kernel 說明

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     * 這裡是全域中介層的堆疊
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, // 檢查應用程式是不是維護中
    ];

    /**
     * The application's route middleware groups.
     * 這裡是路由中介層,將中介層分類後打包一起使用。
     * 
     * //使用方式:
     * // Route::group(['middleware' => ['web']], function () {
     * //   // #code...
     * // });
     *
     * 順便解釋一下
     * \App\Http\Middleware\EncryptCookies
     * 意思是從\根目錄開始看app\Http\Middleware\
     * 
     * \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse
     * 
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,                         // 加密 Cookies
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,    // 加入 Queued Cookies 到 Response
            \Illuminate\Session\Middleware\StartSession::class,                 // 開啟 Session
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,          // 從 Session 中共享錯誤資訊
            \App\Http\Middleware\VerifyCsrfToken::class,                        // 驗證 CSRF Token
        ],

        'api' => [
            'throttle:60,1',
        ],
    ];


    /**
     * The application's route middleware.
     * 這裡也是路由中介層,可以單獨使用或打包使用。
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,                             //
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,   //
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,                 //
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,           //
        'isAdmin' => \App\Http\Middleware\Adminmiddleware::class,                 //我在這裡加上後,Route.php才可以使用 isAdmin
    ];
}

results matching ""

    No results matching ""