Laravelで署名付きURLを生成する方法


  1. URLの生成と有効期限の設定 Laravelでは、Urlファサードを使用して署名付きURLを生成することができます。まず、urlメソッドを使用してURLを生成し、temporarySignedRouteメソッドを使用して有効期限を設定します。例えば、以下のコードでは、route('download', ['file' => 'example.pdf'])という名前付きルートを使用して、example.pdfというファイルのダウンロードURLを生成し、有効期限を1時間に設定しています。
use Illuminate\Support\Facades\URL;
$url = URL::temporarySignedRoute(
    'download',
    now()->addHour(),
    ['file' => 'example.pdf']
);
  1. 署名付きURLのルート定義 上記の例では、temporarySignedRouteメソッドの第1引数にルートの名前を指定しています。このルート名に対応するルート定義を行う必要があります。例えば、以下のようにルート定義を追加します。
Route::get('/download/{file}', function ($file) {
    // ファイルのダウンロード処理など
})->name('download');
  1. 署名付きURLの検証 生成した署名付きURLの検証は自動的に行われます。アプリケーションがリクエストを受け取った際に、自動的に署名の検証が行われます。もし署名が有効期限内であり、改ざんされていなければ、リクエストは正常に処理されます。もし署名が無効であったり、有効期限が切れていた場合は、Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException例外がスローされます。

以上の手順に従うことで、Laravelで署名付きURLを生成してセキュリティを強化することができます。