2016-07-25 150 views
3

當用戶登錄到我的應用程序時,導航中會出現一個下拉列表以訪問管理。但是,當用戶在錯誤頁面(例如404)上絆倒時,它不顯示他們正在登錄,而是顯示「登錄」。爲什麼是這樣?Laravel身份驗證錯誤頁面

這是我的代碼。

@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

它看起來像Laravel只有當它看到合適的啓動會話(這是不是一個404頁)作爲Daniel指出:https://github.com/laravel/framework/issues/11653

爲了解決這個問題(因爲導航欄在全站範圍內,包括404頁)我增加了StartSession類到全球的中間件。

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

現在變成......

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

工作的唯一的事情。感謝bro – raqulka

+0

這可以工作,但如果你有一個API層,這不是一個解決方案,因爲它會將會話添加到你的無狀態API。 –