0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bladeの@authディレクティブがカスタマイズできるってまじ?

Last updated at Posted at 2025-04-02

Bladeのディレクティブ@authとは

Laravelで認証機能を実装すると、未認証認証済みの2つの状態ができます。
この際に認証済みのユーザーにのみ特定の内容を表示したい場合に使えるBladeディレクティブです。

書き方はこの通り

@auth
  // ここに認証済みのユーザに表示させる内容を実装
@else
  // ここに未認証のユーザに表示させる内容を実装
@endauth

例えば認証済みであれば、画面右上にマイページリンクログアウトリンクを表示する
スクリーンショット 2025-04-02 20.39.18.png

未認証であれば、画面右上にログインリンクを表示する
スクリーンショット 2025-04-02 20.05.55.png

というようなことができます。

コードで表すとこの通り
※シンプルにするためにココでは<form>やCSSなどのコードは省いています

@auth
    <a href="#">マイページ</a>
    <a href="#">ログアウト</a>
@else
    <a href="#">ログイン</a>
@endauth

【ここからが本題】@authのカスタマイズについて

まずは経緯から

当初は1つのみ認証機能と先ほど紹介したマイページリンク、ログアウトリンクなどの表示制御も実装していました。

ただ1つのみでなく管理者ユーザー、一般ユーザーのように権限が異なるユーザーのログイン画面、認証ロジックを完全に別に変更しようと考えました。
※これをマルチ認証という
無事管理者ユーザーの実装が完了してテストをしていると...
認証済みであるにも関わらずマイページリンクログアウトリンクが表示されないではありませんか!!

なぜだなぜだと調査した結果、@authディレクティブの仕様に関係していました。

@authディレクティブの仕様について

実際のところやっているのはこれと同じようです

if (Auth::check()) {
  // ここに認証済みのユーザに表示させる内容を実装
} else {
  // ここに未認証のユーザに表示させる内容を実装
}

そんでこのifの中でやっているAuth::check()ではweb guard に対してのみ判定を行ってくれるそうで、

今回私はweb guard をなくして user guard と admin guard にカスタマイズしていました。

その影響でweb guardに対してのみ判定が行われている @auth が効かなかったということなんですね〜

中身まで理解していなかったので「ほえ〜〜〜〜」と感心してしまいました。

@authのカスタマイズ

この書き方で特定のguardに対して認証チェックを行うことができます。

Auth::guard('user')->check() // `user` guard に対して判定

これを使ってLaravel起動時に認証してあげれば良いということで
App\Providers\AppServiceProvider.phpboot()に以下のように書きます。

超簡単に説明すると、「Bladeでauthが使用されたらデフォルトのAuth::check()ではなくAuth::guard('user')->check()を使う」と設定しています。

use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Auth;

public function boot()
{
  Blade::if('auth', function () {
      return Auth::guard('user')->check(); // ここで @auth の認証を'user' ガードを見るようにに強制
  });
}

これで@auth ディレクティブをつかうと、user guard を見て認証のチェックが実行されるようになります!

ちなみにAppServiceProvider.phpはざっくりアプリ全体の設定やカスタマイズをまとめて書く場所と考えておけばいいかなと思っています。
アプリケーションの起動時に何をするかを書くことが多いですね。

てことで今回は@authディレクティブのカスタマイズについて書かせていただきました。

やっぱコーディングは楽しいですね🙃

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?