L

ログイン・新規登録の仕組みを理解する

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 広告が表示されます