Laravel9 | リソースコントローラの一部のアクション(index, show)のみミドルウェアの認証(auth)を除外する方法

リソースコントローラで自動生成されたアクションの内、indexとshowのみミドルウェアの認証(auth)の対象としないようにする方法。

コンストラクタで追加する認証ミドルウェアかルーティング設定でリソースコントローラをバラして記述して認証が必要なメソッドのみ認証ミドルウェアでグループ化して対応します。

コンストラクタで除外

リソースコントローラにコンストラクタを追加して認証のミドルウェアの設定と except で認証から除外したいメソッドを配列で指定します。

# routes/web.php

Route::resource('posts', PostController::class);
# app/Http/Controllers/PostController.php

public function __construct()
{
    // index, show を除外
    $this->middleware('auth')->except(['index', 'show']);
}

ルーティング設定のミドルウェアでグループ化と除外

リソースコントローラのルート設定をバラして記述してミドルウェアの認証対象としないメソッドはグループの外に記述します。

# routes/web.php

// 認証(auth)ミドルウェアでグループ化
Route::middleware('auth')->group(function () {
    Route::get('/posts/create', [PostController::class, 'create'])->name('posts.create');
    Route::post('/posts', [PostController::class, 'store'])->name('posts.store');
    Route::get('/posts/{post}/edit', [PostController::class, 'ineditdex'])->name('posts.edit');
    Route::put('/posts/{post}', [PostController::class, 'update'])->name('posts.update');
    Route::delete('/posts/{post}', [PostController::class, 'destroy'])->name('posts.destroy');
});

// 除外するメソッドをグループ設定の外に記述する
Route::get('/posts', [PostController::class, 'index'])->name('posts.index');
Route::get('/posts/{post}', [PostController::class, 'show'])->name('posts.show');

動作環境情報

"macOS Ventura" 13.1
"Docker Desktop" 4.15.0
"Laravel Sail"
"Laravel Framework" 9.48.0

コメント

タイトルとURLをコピーしました