ログイン・新規登録の仕組みを理解する
Breezeが用意した認証が裏で何をしているのかを理解し、ログイン中かどうかの判定やページの保護方法を学びます。
広告枠(記事上)— 本番では AdSense 広告が表示されます
前の単元で、Breeze によってログイン機能が動くようになりました。この単元では、それがどう動いているのかを理解し、自分のアプリで「ログイン中かどうか」を判定したり、ページを保護したりできるようになります。
ログイン中のユーザーを取り出す
Laravel は、いまログインしている人の情報を、どこからでも auth() を通じて取得できます。
auth()->user(); // ログイン中のユーザー(未ログインなら null)
auth()->user()->name; // その人の名前
auth()->id(); // その人のID
auth()->check(); // ログインしているか(true / false)
たとえば「投稿に投稿者を記録する」なら、次のように書けます。
Post::create([
'title' => $request->input('title'),
'body' => $request->input('body'),
'user_id' => auth()->id(), // 投稿者=ログイン中の人
]);
ログインしている人だけに見せる(ページの保護)
「ログインした人だけがアクセスできるページ」を作るには、ミドルウェア という仕組みを使います。ミドルウェアは、**処理の前に通る「関所」**のようなものです。auth ミドルウェアを付けると、未ログインの人は自動的にログイン画面へ送られます。
ルートに middleware('auth') を付けるだけです。
Route::get('/posts/create', [PostController::class, 'create'])
->middleware('auth');
複数のルートをまとめて保護することもできます。
Route::middleware('auth')->group(function () {
Route::get('/posts/create', [PostController::class, 'create']);
Route::post('/posts', [PostController::class, 'store']);
});
画面で出し分ける:@auth と @guest
Blade では、ログイン状態によって表示を変えられます。
@auth
<p>{{ auth()->user()->name }} さん、こんにちは</p>
<a href="/logout">ログアウト</a>
@endauth
@guest
<a href="/login">ログイン</a>
@endguest
@auth … @endauth… ログイン中の人だけに見せる。@guest … @endguest… 未ログインの人だけに見せる。
まとめ
- ログイン中のユーザーは
auth()->user()、IDはauth()->id()、判定はauth()->check()。 - ページを保護するには、ルートに
middleware('auth')を付ける(未ログインは自動でログイン画面へ)。 - ミドルウェアは処理の前に通る「関所」。
- Blade では
@auth/@guestで表示を出し分けられる。 - 次の単元では、「この投稿を編集してよいのは投稿者本人だけ」のような認可を学びます。
広告枠(記事下)— 本番では AdSense 広告が表示されます