LoginSignup
29
23

More than 1 year has passed since last update.

Laravelで簡易的にBasic認証

Last updated at Posted at 2020-12-15

LaravelでBasic認証をやる方法はいくつかありますが、ライブラリを入れたりせず、データベース使ったりせず、簡易的にに実現する方法です。

  • ミドルウェアを作成する(1ファイル)
  • ミドルウェアをKernelに記述する
  • routes/web.php で認証の対象のページを記述する

の3ステップで実現できます。

ミドルウェアを作成する

今回のサンプルでは、BasicAuthMiddlewareという名前でミドルウェアを作成します。

php artisan make:middleware BasicAuthMiddleware

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

App\Http\Middleware\BasicAuthMiddleware.php
    public function handle(Request $request, Closure $next)
    {
        $username = $request->getUser();
        $password = $request->getPassword();

        if ($username == 'sample' && $password == 'sample') {
            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')
        ]);
    }

ミドルウェアをKernelに登録

app/Http/Kernel.php の $routeMiddleware に、作成したミドルウェアを記述。
今回は、'basicauth'という名前で登録

app/Http/Kernel.php
// Laravel9
'basicauth' => [
    \App\Http\Middleware\BasicAuthMiddleware::class,
],

// Laravel8以下
'basicauth' => \App\Http\Middleware\BasicAuthMiddleware::class,

バージョン5くらいのLaravelだと、下記の書き方になります。

'basicauth' => 'App\Http\Middleware\BasicAuthMiddleware',

routes/web.php で認証の対象のページを記述する

登録した名前のミドルウェアで、対象のページをグループ化する

routes/web.php
Route::group(['middleware' => 'basicauth'], function() {
    // ここに対象のページを記述
    // 例)
    Route::get('/', [App\Http\Controllers\TopController::class, 'index'])->name('top');
});

以上で完了です。

29
23
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
23