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')->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 Blade 文件中使用 IF 条件的正确方法是啥?
如何在 laravel 中为 highcharts 做 if else 语句