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');
});
以上で完了です。