Laravelのログイン画面URLを可変にする

Laravelに限らずかもしれませんが、ログイン画面のデフォルトのURLって/loginになっていないでしょうか。WordPressでも/login/adminがデフォルトですし、知っていれば第三者が簡単にログイン画面にアクセスできてしまいます。

ルート定義で全く異なるURLを直接指定することもできますが、オープンソースでは意味がありません。そこで、このサイトではログインURLを環境変数に設定して可変にする方法を試しました。

要約

なぜ可変にするか?

  • ログインURLを推測されにくくすることで不正アクセスのリスクを下げる

どのように可変にするか?

  • 任意のURLを環境変数として定義し、configヘルパ関数を経由してルート定義で呼び出し、引数として渡す

設定手順

1. 任意のURLを環境変数に定義

.envに以下のように定義します。

LOGIN_ROUTE=login/hogehoge

2. configファイルの設定

configディレクトリの中の任意の設定ファイルを使用します。例として、config/myconf.phpを新たに作成します。.envに定義したURLをenvへルパで呼び出して任意のキーにセットします。

// config/myconf.php
return [
    'login_route' => env('LOGIN_ROUTE', 'login'),
];

3. ルート定義で呼び出し

configヘルパ関数を使用して、設定変数からlogin/hogehogeを取得してセットします。

// routes/auth.php
Route::get(config('myconf.login_route'), [MyAuthenticateController::class, 'create'])->name('login');

最後に

routes/auth.phpのルート定義の変更前後はこちら。

変更前:

Route::middleware('guest')->group(function () {
    Route::get('/login', [MyAuthenticateController::class, 'create'])->name('login');
    Route::post('/login', [MyAuthenticateController::class, 'authenticate']);
});

変更後:

Route::middleware('guest')->group(function () {
    Route::get(config('myconf.login_route'), [MyAuthenticateController::class, 'create'])->name('login');
    Route::post(config('myconf.login_route'), [MyAuthenticateController::class, 'authenticate']);
});

関連記事