Laravel Blade If 语句抛出非对象 属性 使用 Guard 进行身份验证检查时出错

Laravel Blade If Statement throwing Non-Object Property Error upon Auth Check with Guard

我是 laravel 的新手,所以老实说,我不确定要提供什么信息,但我会尽我所能彻底地提出问题。

让我们看看我的代码:

@if(Auth::guard('admin')->check() || Auth::guard('web')->check())
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
    {{ Auth::user()->name }} <span class="caret"></span>
    </a>


    {{-- Authenticated Dropdown Menu --}}
    <ul class="dropdown-menu" role="menu">
      {{-- Admin Links --}}
      @if (Auth::guard('admin')->check())
        <li><a href="{{ route('posts.index') }}">Manage Blog Posts</a></li>
        <li role="separator" class="divider"></li>
      @endif

      {{-- User Links --}}
      @if (Auth::guard('web')->check() || Auth::guard('admin')->check())
        <li><a href="#">User Test Link</a></li>
        <li role="separator" class="divider"></li>
      @endif

      {{-- Logout and Form --}}
      <li>
        <a href="{{ route('logout') }}"
        onclick="event.preventDefault();
        document.getElementById('logout-form').submit();">
        Logout
        </a>
        {!! Form::open(['route' => 'logout', 'id' => 'logout-form', 'style' => 'display: none;']) !!}
        {!! Form::close() !!}
      </li>
      {{-- End Logout Form --}}
    </ul>
  </li>

@else
  <li><a href="{{ route('login') }}">Login</a></li>
  <li><a href="{{ route('register') }}">Register</a></li>
@endif

现在我认为 Auth::guard('admin')->check() 返回 true 或 false 取决于用户是否有身份验证。我还需要 运行 这个 if 语句来对抗两个守卫,并检查管理员是否登录或用户是否登录。

基本上,正如您可能从我的代码中看出的那样,我希望 bootstrap 下拉列表在登录后显示,如果没有则显示登录和注册按钮。

THEN 如果 User 已记录在下拉列表中,则不会显示 "Manage Blog Posts" link 因为那是 Admin link... 如果Admin 已登录,但会同时显示 link。

正如您在下面的代码片段中看到的,这是与最顶部完全相同的 if 语句。这个工作得很好,但父 if 语句似乎不工作。

  {{-- User Links --}}
  @if (Auth::guard('web')->check() || Auth::guard('admin')->check())
    <li><a href="#">User Test Link</a></li>
    <li role="separator" class="divider"></li>
  @endif

这个错误似乎只发生在我仅以管理员身份登录并且我尝试访问任何不受我的 auth:admin 中间件保护的页面时。

我收到此错误是因为我错误地嵌套了 if 语句吗?也许我只是累了,需要另一双眼睛才能看到最小的错误。我已按照 YouTube 上的 DevMarketers Multi Auth 教程进行设置。

(DevMarketer 的 YouTube 多授权教程:https://youtu.be/iKRLrJXNN4M?list=PLwAKR305CRO9S6KVHMJYqZpjPzGPWuQ7Q

附件是我收到的错误消息的屏幕截图以及整个 _nav.blade.php 的 pastebin。这种看法是片面的。在我开始工作之前,我也只是 运行 composer update 并注意到 laravel 框架刚刚从 5.4.32 升级到 5.4.33。不知道这是否会产生显着差异。

https://pastebin.com/pLDTmU4w

http://imgur.com/a/0y6kd

我可以根据要求为该项目提供我的 github 存储库 link。

因为您正在使用管理员保护,所以您需要从中检索用户。在第 38 行试试这个:

{{ Auth::guard('admin')->user()->name }}

或者您可以检查是否是 admin

{{ Auth::guard('admin')->check() ? Auth::guard('admin')->user()->name : Auth::user()->name }}