2022.02.14
簡単!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