Basic認証の掛け方〜Laravel編

前置き

本日のお題は、LaravelアプリでのBasic認証の掛け方です。

例によって、自分用のメモです。

Basic認証とは

ご存知の方も多いと思いますが念のため。

Basic認証とは、事前に決められたユーザー名とパスワードを入力することでwebサイトの利用が可能になるという認証方式のことです。

このように書くとアカウントのログインのことのように聞こえますが、両者は別物です。

「そのサイト自体に入る際に用いられる認証」がBasic認証であり、サイトに入った後に「自分自身の会員情報にアクセスしたり会員機能を利用したりするのに必要」なのがログイン機能という違いがあります。

手順

LaravelアプリでBasic認証を設定する手順は、以下の通りになります。

  • .envファイル内に認証用のユーザー名とパスワードを設定する
  • config/app.php内で環境変数を読み込む
  • Basic認証のためのmiddlewareを作成する
  • middleware内で環境変数を呼び出す
  • middlewareをKernelに追加する
  • route/web.phpに、Basic認証の対象となるパスを記述する

.envファイルにBasic認証用の情報を記述する

Laravelアプリでは、環境変数は全て.envファイルに記述します。

BASIC_AUTH_USER="xxxx"

BASIC_AUTH_PASSWORD="xxxx"

.config/app.phpでの環境変数の読み込み

.envに設定した変数をconfig/app.phpで読み込みます。

"BASIC_AUTH_USER" => env("BASIC_AUTH_USER"),

"BASIC_AUTH_PASSWORD" => env("BASIC_AUTH_PASSWORD")

env("xxx")とすることで、.envファイル内に記述してある環境変数を読み込むことができます。

envメソッドには第二引数を設定することもでき、第一引数が存在しない場合には第二引数が読み込まれます。

Basic認証用のmiddlewareの作成

php artisan make:middleware BasicAuthMiddleware

middleware内で環境変数を呼び出す

入力されたusernameとpasswordを取得

$username = $request->getUser();

$password = $request->getPassword();

# Basic認証用の情報と比較

 if($username == config("app.BASIC_AUTH_USER") && $password == config("app.BASIC_AUTH_PASSWORD")){
  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')
        ]);

 

configメソッドは、configディレクトリに記述された変数を呼び出すためのものです。

今回はconfig/app.phpの変数なので、config("app.xxx")としています。

middlewareをKernelに追加

作成したmiddlewareをKernelに追加します。

protected $routeMiddleware = [

.......省略.........

"basicauth" => App\Http\Middleware\BasicAuthMiddleware::class

# この一文を追加

web.phpBasic認証の対象パスを指定

Route::group(["middleware" => "basicauth"], function(){

    # この中に、Basic認証をかけるルーティングを全て移動させる

});