2016-07-25 130 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。 –