ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本: auth middleware
ログイン必須にしたいルートに auth middleware を付けます:
// routes/web.php
use App\Http\Controllers\DashboardController;
// 単一ルートに付与
Route::get('/dashboard', [DashboardController::class, 'index'])
->middleware('auth')
->name('dashboard');
// グループに一括付与
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'show']);
Route::put('/profile', [ProfileController::class, 'update']);
Route::delete('/account', [AccountController::class, 'destroy']);
});
// プレフィックス + 名前空間 + middleware
Route::middleware(['auth', 'verified'])
->prefix('admin')
->name('admin.')
->group(function () {
Route::get('/users', [Admin\UserController::class, 'index'])->name('users.index');
});
未ログインで /dashboard にアクセスすると /login へリダイレクトされます。
認証 guard の指定
| middleware | 用途 | 備考 |
|---|---|---|
auth | Web セッション認証 | デフォルト guard |
auth:sanctum | SPA / API トークン | Laravel 推奨 |
auth:api | Passport API トークン (旧) | Passport 利用時 |
auth:admin | カスタム guard (admin) | config/auth.php で定義 |
auth.basic | HTTP Basic 認証 | クイック保護用 |
verified | メール認証済のみ | auth と併用 |
guest | 未ログインのみ | login / register 画面用 |
password.confirm | パスワード再確認 | センシティブ操作前 |
API ルート (Sanctum)
// routes/api.php
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', fn(Request $r) => $r->user());
Route::apiResource('posts', PostController::class);
});
// 公開API + 認証必須API を併存
Route::get('/public/posts', [PublicPostController::class, 'index']);
Route::middleware('auth:sanctum')->get('/private/posts', [PrivatePostController::class, 'index']);
認可: can middleware
「自分の投稿しか編集できない」等の所有者チェックは Policy + can middleware:
// routes/web.php
Route::put('/posts/{post}', [PostController::class, 'update'])
->middleware(['auth', 'can:update,post']);
// app/Policies/PostPolicy.php
namespace App\Policies;
use App\Models\Post;
use App\Models\User;
class PostPolicy
{
public function update(User $user, Post $post): bool
{
return $user->id === $post->user_id;
}
}
// app/Providers/AuthServiceProvider.php
protected $policies = [
Post::class => PostPolicy::class,
];
Form Request での authorize()
// app/Http/Requests/PostUpdateRequest.php
class PostUpdateRequest extends FormRequest
{
public function authorize(): bool
{
// route("post") が暗黙バインドの Post モデル
return $this->user()->id === $this->route('post')->user_id;
}
public function rules(): array
{
return ['title' => 'required|max:100'];
}
}
authorize() が false を返すと 403 Forbidden。
ゲスト専用ルート
ログイン済ユーザーが /login にアクセスしたら /dashboard へリダイレクトしたい:
// routes/web.php
Route::middleware('guest')->group(function () {
Route::get('/login', [LoginController::class, 'show'])->name('login');
Route::post('/login', [LoginController::class, 'store']);
Route::get('/register', [RegisterController::class, 'show'])->name('register');
Route::post('/register', [RegisterController::class, 'store']);
});
// app/Http/Middleware/RedirectIfAuthenticated.php
public function handle($request, Closure $next, ...$guards)
{
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect('/dashboard');
}
}
return $next($request);
}
ログイン後リダイレクト先のカスタマイズ
// app/Http/Middleware/Authenticate.php
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
// LoginController で 認証成功後のリダイレクト
protected $redirectTo = '/dashboard';
// または method override
protected function redirectTo()
{
return Auth::user()->isAdmin
? '/admin'
: '/dashboard';
}
SPA + Sanctum パターン
// config/sanctum.php
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000')),
// routes/api.php
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/me', fn(Request $r) => $r->user());
});// フロント (Vue / React) 側
// CSRF Cookie を取得
await axios.get('/sanctum/csrf-cookie');
// ログイン
await axios.post('/login', { email, password });
// 認証必須 API
const res = await axios.get('/api/me');
middleware の組合せ実例
// 管理画面: 認証 + メール認証 + 管理者ロール + パスワード再確認
Route::middleware([
'auth',
'verified',
'role:admin',
'password.confirm:120', // 120分以内に再確認
])->prefix('admin')->group(function () {
Route::get('/users/{user}/destroy', [Admin\UserController::class, 'destroy'])
->middleware('can:delete,user');
});
FAQ
Q: middleware を全ルートに掛けたい
A: app/Http/Kernel.php の $middleware (グローバル) または $middlewareGroups (web/api) に登録。
Q: 認証エラー時に JSON を返したい
A: Authenticate::redirectTo() 内で $request->expectsJson() を判定。null を返すと自動で 401 JSON。
Q: 複数 guard を OR で組合せたい
A: auth:web,admin のようにカンマ区切り。どちらかに通れば OK。
Q: middleware の順番は重要?
A: 重要。auth → verified → can の順が一般的。auth 前に can を置くと user が null でエラー。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- インストールと設定
- クイックスタート & チュートリアル(初心者向け)
- クイックスタート & チュートリアル(中級者向け)
- ルーティング
- Bladeテンプレート(ビュー/レイアウト)
- コントローラー
- マイグレーションとテーブル定義
- データベースの設定
- Eloquentモデル (ORM)
- SQLとクエリビルダー
- バリデーション
- .envファイルの設定値へのアクセス
- 動作環境による分岐処理
- configフォルダ配下の設定値へのアクセス
- assetヘルパーを利用したpublicフォルダへのアクセス
- storageフォルダへのアクセス
- アプリケーション名の変更
- メンテナンス
- ログイン画面(認証システム)の作成
- ログインの必須化
- ログインユーザー情報の取得
- ルートの認証化
- 本番サーバーへのデプロイ方法
- 多言語化
- csrf_field
- ファイルのダウンロード
- CSVのアップロードおよび読み込み(maatwebsite/excel)
- ページタイトルの設定
- コマンド一覧
- エラー一覧
- SQLの実行ログ出力方法
- キャッシュのクリア
- Selectの結果の最初もしくは最後に任意の値を追加する方法
- ajaxでPOST通信する際の注意点
- ソーシャルログインの実装
- セッション情報の確認
- ログイン、ユーザー登録、パスワードリセット後のリダイレクト先の変更方法
- redirectやreturn viewにメッセージを付与する方法
- クッキー(cookie)の設定と取得
- クラスの再読み込み
- csrfの有効時間を変更する方法
- ViewComposerを用いてviewに共通の値を付与する方法
- View::shareを用いて共通の値を各ビューに渡す方法
- ミドルウェアを用いた処理の共通化
- Middleware内でAuth::check()などを使用する方法
- Controller以外でリダイレクトする方法
- セッションの値の取得/保存/更新/削除
- $requestの値を変更する方法
- 常時SSL化
- ページング(ページネーション)をする方法
- vue.jsとの連携
- Vue.jsと連携するSPA実行環境構築
- .envの値をvue.jsで参照する方法
- vue.jsを本番環境にリリースする方法
- could not find driver(Windows, MySQL編)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?