🦀

laravel5.8¦404エラーページでログインユーザー可否を判定して表示をわける方法

2020/09/25に公開

実装したいこと

・404エラーページでログインユーザーか判定して、表示を分けたい

環境

・laravel 5.8
・php 7.2

概要

ログインユーザーか判定したいので、Authファサードを使いたいところなのです...が!

初心者なので知らなかったのですが、エラービューではセッションにアクセスできず、基本的にミドルウェアは実行されないようです…
Auth::check()で判定できるかと思いきやログイン可否に関わらずfalseになってしまいました。

調べてみたところ、laravel5.5からfallback route機能が追加されたので、これを使ってみます🎩

404ファイルはerrorsディレクトリに作成

laravel
├─ resources
│   ├─ views
│   │   ├─ errors
│   │   │   └─ 404.blade.php

実装

web.phpにfallback routeを追記

Route::fallback(function() {
    return response()->view('errors.404', [], 404);
});

404ページを修正

Auth::check()が使えるようになったのですが、わかりやすくディレクティブを使っていきたいと思います。

<body>
    <div class="flex-center position-ref full-height">
        <div class="content">
            <div class="title">
                お探しのページが見つかりませんでした。
                @auth
                  <a href="{{ url()->previous() }}">戻る</a>
                @endauth
                @guest
                 <a href="{{ route('login') }}">ログインページへ</a>
                @endguest
            </div>
        </div>
    </div>
</body>

無事にログインしているか、していないかでリンクの出し分けをすることができました◎

ログインユーザーの場合はケバブメニューが右上に表示される仕様だったのですが、fallback routeを設定するとケバブメニューも表示されるようになっていました🥙 すごい。。。

Discussion