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

Posted

技术标签:

【中文标题】Laravel Blade If 语句在使用 Guard 进行身份验证检查时抛出非对象属性错误【英文标题】:Laravel Blade If Statement throwing Non-Object Property Error upon Auth Check with Guard 【发布时间】:2018-01-27 18:17:52 【问题描述】:

我对 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')-&gt;check() 返回真或假取决于用户是否具有身份验证。我还需要对两个警卫运行这个 if 语句,并检查管理员是否已登录或用户是否已登录。

基本上,您可能从我的代码中可以看出,如果已登录,我希望引导下拉菜单显示,如果未登录,则显示登录和注册按钮。

那么如果User 登录在下拉列表中,则不会显示“管理博客文章”链接,因为那是Admin 链接...如果Admin 已登录,则显示两个链接。

正如您在下面的 sn-p 中所见,这与最上面的 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 存储库链接。

【问题讨论】:

也尝试添加 !empty() 条件。它应该在那之后工作。 添加到哪里,能否请您提供答案并使用代码示例? 如果你在控制器中检查你的中间件并路由它会更容易处理!!!! 【参考方案1】:

因为您使用的是管理员防护,您需要从中检索用户。在第 38 行试试这个:

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

或者你可以检查是否是管理员

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

【讨论】:

太棒了!这解决了它。我不知道现在我必须将所有用户变量都变成三元运算符。插入那条线,它就像一个魅力!谢谢! @if(Auth::guard('web')->check()) 在刀片视图中不起作用。我正在使用 laravel 7.29 版本。您的任何新建议将不胜感激。谢谢。

以上是关于Laravel Blade If 语句在使用 Guard 进行身份验证检查时抛出非对象属性错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 4 中的 @if 语句(刀片)中获取当前 URL?

Laravel 5.5 Blade::if 简介

在 Laravel Blade 文件中使用 IF 条件的正确方法是啥?

如何在 laravel 中为 highcharts 做 if else 语句

laravel 视图流程控制,if switch for loop

如何在 Laravel 的 PHP/Blade 中使用 Foreach 循环?