2024.04.20
【Laravel】ログイン(認証)済みか判定して処理を分岐する

UnsplashSergey Shmidtが撮影した写真

ルーティング

ログイン済みの場合だけ該当のルートを許可し、
未ログイン状態だとアクセスを弾く設定の書き方です。

 

■1つのルートのみ

以下のように「->middleware(‘auth’)」を付けるだけです。

Route::get('/users', [ UserController::class, 'index' ])->name('users.index')->middleware('auth');

■複数のルートをまとめて

Route::middleware('auth')->group(function(){
  ~~ここに任意のルートを記述する~~
  Route::get( '/users',  [UserController::class, 'index']);  // ⇐例
})

 

未ログイン時のリダイレクト先は「/bootstrap/app.php」で指定します。
以下の赤字部分を任意のパスに書き換えてください。

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->redirectGuestsTo('/users/signin');
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

コントローラ

ログインユーザーの情報は「Auth::user()」で取得します。

「Autu::user()->name」のようにnameカラムを指定すると、任意カラムの値を取得することができます。

 

今回は「Auth::user()」が空かどうかでログイン状態を判定して処理を分岐させます。

use Illuminate\Support\Facades\Auth;  // Authファサードの呼出

if(empty(Auth::user())){
    ~~未ログイン時の処理~~
}else{
    ~~ログイン済みの時の処理~~
}

もしくは、以下のようにヘルパーを使う

if(empty(auth()->user())){
    ~~未ログイン時の処理~~
}else{
    ~~ログイン済みの時の処理~~
}

ビュー

ビューの表示をログイン済みか否かで変える方法です。

■ログイン済みの時に表示させる

@auth
  <p>ログイン済みです</p>
@endauth

■ログインしてない時に表示させる

@guest
  <p>ログイン状態していません</p>
@endguest

 

以上です。