2016-07-25 5 views
3

ユーザーが自分のアプリケーションにログインすると、管理にアクセスするためのナビゲーションにドロップダウンが表示されます。しかし、ユーザーがエラーページ(404など)を突き抜けた場合、ユーザーはログイン中ではなく、「ログイン」と表示されます。どうしてこれなの?エラーページのLaravel Auth

ここに私のコードです。

@if (Auth::check()) 

    <ul class="nav navbar-nav navbar-right"> 
     <li class="dropdown"> 
      <a style="cursor: pointer;" class="dropdown-toggle" data-toggle="dropdown"><i class="glyphicon glyphicon-user"></i> {{ Auth::user()->name }} <b class="caret"></b></a> 
      <ul class="dropdown-menu"> 
       <li> 
        <a href="/admin/dashboard"><i class="glyphicon glyphicon-tasks"></i> Dashboard</a> 
       </li> 
       <li role="separator" class="divider"></li> 
       <li><a href="/logout"><i class="glyphicon glyphicon-log-out"></i> Logout</a></li> 
      </ul> 
     </li> 
    </ul> 

@else 

    <ul class="nav navbar-nav navbar-right"> 
     <li><a href="/login"><i class="glyphicon glyphicon-log-in"></i> Login</a</li> 
    </ul> 

@endif 
+0

はあなたの404ページでセッションをダンプすることができなりましたか?あなたは何を見ますか? – Daniel

+0

セッションがエラーページの中で空であるように見えますが、それ以外の場所はありません。 – Polarize

+0

明らかに、これは孤立した問題ではありません:http://stackoverflow.com/questions/37142168/laravel-5-sessions-on-404-route https://github.com/laravel/framework/issues/11653 – Daniel

答えて

3

Danielが指摘したようにLaravelのみ(404ページではありません)、それは適切な見ているセッションを開始ように見えます:https://github.com/laravel/framework/issues/11653を。

これと対処するには(ナビゲーションバーが404ページを含むサイト全体であるため)、グローバルなmiddlwaresにStartSessionクラスを追加しました。

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class 
]; 

は今...

protected $middleware = [ 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    \Illuminate\Session\Middleware\StartSession::class 
]; 
+0

はうまくいきました。ありがとうございました – raqulka

+0

これは動作しますが、APIレイヤがある場合、これはソリューションではなく、ステートレスAPIにセッションを追加します。 –