目次

【Laravel】Basic 認証

参考:【Laravel】Basic認証を実装する方法

Laravel のバージョン違いによるものか、上記参考サイトの方法ではエラーが出たため「Laravel Framework 7.19.1」でのやり方を残しておきます。

php artisan -V
Laravel Framework 7.19.1

といっても、原因は「routes/web.php」への middleware の指定の仕方でしたので、そこだけ書き方を変えれば OK でした。

以下、手順。

Basic 認証のミドルウェア作成

php artisan make:middleware BasicAuthMiddleware

作成された app/Http/Middleware/BasicAuthMiddleware.php の中身を以下のように書き換えます。
handle 関数の中身だけコピペで OK!

<?php

namespace App\Http\Middleware;

use Closure;

class BasicAuthMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        switch (true) {
            case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']):
            case $_SERVER['PHP_AUTH_USER'] !== 'ユーザ名':
            case $_SERVER['PHP_AUTH_PW']   !== 'パスワード':
                header('WWW-Authenticate: Basic realm="Enter username and password."');
                header('Content-Type: text/plain; charset=utf-8');
                die('このページを見るにはログインが必要です');
        }

        return $next($request);
    }
}

ユーザ名とパスワードを直書きしてますが、環境によって変えたい場合は .env に、複数ユーザを作りたい場合は配列で持っておけばよいかと。

作成したミドルウェアを追加

app/Http/Kernel.php の $routeMiddleware に以下を追加。

    protected $routeMiddleware = [
        ... 略 ...
        'basic.auth' => 'App\Http\Middleware\BasicAuthMiddleware',
    ];

ルーティングに Basic 認証を指定

routes/web.php の該当ページに作成した Basic 認証のミドルウェアを追加する。

Route::middleware('basic.auth')->group(function(){
    Route::get('/', 'HomeController@home')->name('home');
});

これで完了です。
思った以上に簡単ですね。