在 Laravel 5.2 视图中使用 Auth:User() 进行导航

Using Auth:User() in Laravel 5.2 view for nav

我有一个索引路由“/”,它加载 index.blade.php 扩展了 master。我无法在导航栏中使用 Auth::User() ,这是主导航栏的一部分。它确实适用于需要身份验证的页面。我有登录和注册按钮,这些按钮通过 /login 和 /register link AuthController,当经过身份验证的用户正在查看“/”索引页面或任何其他不需要身份验证的页面时,我希望这些按钮被注销替换.

当用户登录时,它们被重定向到正常工作的 /dashboard 路由并且导航栏正确显示,但是当他们查看主页时,登录和注册按钮在导航中并单击他们只是将他们重定向回“/”索引路由,而不显示登录或注册表单。 (因为我假设他们已经登录了。)再次获取表单的唯一方法是在地址栏中手动输入 /logout。

我试图到处查找答案,但无法弄清楚。

dd(\Auth::user()) returns 控制器中为空。 我见过很多类似的问题,但与旧版本的 Laravel 有关,但解决方案似乎不起作用,或者我只是没有正确应用它们。

感谢您的帮助!

route.php

Route::get('/','PagesController@index');
Route::group(['middleware' => ['web']], function () {
        //    
        Route::controllers([
         'register' => 'Auth\AuthController',
         'password' => 'Auth\PasswordController',
        ]);
});

PagesController.php

class PagesController extends Controller
{
    //

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //

    }

    public function index()
    {

        $nav_active = 'home';

        return view('pages.index',compact('nav_active'));

app.blade.php

<ul class="nav navbar-nav navbar-right">
      @if (Auth::guest())
        <li><a href="{{ url('/login') }}">Login</a></li>
        <li><a href="{{ url('/register') }}">Register</a></li>
      @else
        <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
             {{ Auth::user()->name }} <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
                <li><a href="{{ url('/logout') }}"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
            </ul>
        </li>
     @endif
</ul>

page/index.blade.app

@extends('layouts.app')

@section('content')
<div class="container">
    ...
    </div>
</div>
@stop

你在 dd() 中的 Auth::user() 之前有一个反斜杠。您还可以在 app.blade.php 中将 Auth::guest() 替换为 Auth::check() 吗?

将所有内容放入 web 中间件。 web 中间件由处理会话的其他中间件组成。无会话 = 无用户。

例如,其中一个名为 Illuminate\Session\Middleware\StartSession,它负责启动您的会话。

我不确定您为什么决定将该特定路由放在 web 组之外,但没有它,您将没有用户。如果您打算做其他事情,例如构建 API.

,您应该只将路由放在组之外

我遇到了类似的问题。在配置我的导航栏:

@if(Auth::guest())
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
     <i class="fa fa-user"></i> <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
      <li><a href="{{ url('/login') }}">Login</a></li>
      <li><a href="{{ url('/register') }}">Sign Up</a></li>
    </ul>
  </li>
@else
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
     <i class="fa fa-user"></i> {{ Auth::user()->name }}
                               <span class="caret"></span>
    </a>
    <ul class="dropdown-menu" role="menu">
      <li><a href="{{ url('/logout') }}">Logout</a></li>
    </ul>
 </li>            
@endif

但是当我登录时,这个导航栏给我错误:

AliasLoader.php 第 63 行中的 FatalErrorException: 已达到“100”的最大函数嵌套级别,正在中止!

要解决此问题,请在 bootstrap/autoload.php 中输入并在文件末尾添加以下行:

ini_set('xdebug.max_nesting_level', 120);