東京都府中市、九段下のWEB制作会社Maromaroのブログです

2022.02.14

taka

簡単!Laravelで指定したRouteにBasic認証をかける方法

MaromaroのTakaです。

今回はLaravelで指定したRouteにBasic認証をかける方法を記事にしました。

Basic認証をかける方法はいくつかありますが、
シンプルに簡単に出来る方法をご紹介させて頂きます。

実装

 

ミドルウェアを作成する

まず初めにBasic認証用のミドルウェアを作成します。

以下コマンドでミドルウェアを作成すると、

php artisan make:middleware BasicAuthMiddleware

app/Http/Middleware

上記ディレクトリ内に

BasicAuthMiddleware.php

が作成されます。

作成したミドルウェアのhandleメソッドを、以下のように実装します。
ユーザー名とパスワードは、ここに直接書いてます。

/* BasicAuthMiddleware.php */
    public function handle(Request $request, Closure $next)
    {
        $username = $request->getUser();
        $password = $request->getPassword();

        if ($username == 'test' && $password == 'test') {
            return $next($request);
        }

        abort(401, "Enter username and password.", [
            header('WWW-Authenticate: Basic realm="Sample Private Page"'),
            header('Content-Type: text/plain; charset=utf-8')
        ]);
    }

$username == 'test' && $password == 'test'

上記「test」となっている部分はIDとPASSになりますので、
適宜お好みに書き換えてください。

 

ミドルウェアをKernelに登録

app/Http/Kernel.php の $routeMiddleware に、作成したミドルウェアを記述します。

以下のように追加で記述してください。

/* Kernel.php */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'set.locale' => \App\Http\Middleware\SetLocale::class,
         /* 以下に追加 */
        'basicauth' => \App\Http\Middleware\BasicAuthMiddleware::class,
    ];

 

Web.phpに対象を記述する

以下のように登録したミドルウェアで対象を囲んでください。

/* Web.php */
Route::group(['middleware' => 'basicauth'], function() {
    /* ここに対象のページを記述してください */

    /* ここに対象のページを記述してください */
    /* 例 */
    Route::get('/', [App\Http\Controllers\TopController::class, 'index'])->name('home');
});

このように記述することで、
group内に記述されたRouteに対して指定したBasic認証がかかるようになります。

以上が簡単にBasic認証をかける方法でした。

 

Taka