Laravel 5:如果用户登录,则更改导航栏
Posted
技术标签:
【中文标题】Laravel 5:如果用户登录,则更改导航栏【英文标题】:Laravel 5: Change navbar if user is logged 【发布时间】:2015-06-02 16:56:32 【问题描述】:总的来说,我对 Laravel、MVC 和模板引擎完全陌生。
如果用户已登录,我需要显示某些导航栏按钮和选项,例如:通知、注销、个人资料等……否则显示登录按钮。
非常感谢任何有关我如何以正确方式解决此问题的帮助。 这是我目前正在考虑的:
User
对象始终传递给视图。
视图会检查 User
是否设置(意味着它已登录)以包含导航栏的适当部分刀片模板。
app.blade.php:
...
@if (isset($user))
@include('partials.navbarlogged')
@else
@include('partials.navbar')
...
这是最好的方法吗? 感谢您的宝贵时间!
【问题讨论】:
是你自己创建的 User 模型还是使用 Laravel 内置的 User 模型? this question 的答案也应该适当地回答你的。 【参考方案1】:如果你使用 Laravel 5 的内置用户模型,你可以简单地做
@if (Auth::check())
//show logged in navbar
@else
//show logged out navbar
@endif
【讨论】:
我没有使用默认的身份验证机制,所以这不起作用,需要找到一种方法让它与我的自定义 OpenID 身份验证一起使用。但看起来我在模板方面的方向很好。感谢您的宝贵时间! 我会避免传递整个用户对象,所以也许一个小的身份验证助手是为了?创建您自己的帮助文件,这样您就可以在其中执行所有杂乱的代码,因此您可以在模板中执行类似Auth::check()
的操作
该新课程的推荐位置是什么?事实上,不需要整个 User 对象。将所需的字段存储在 Session 中(名称、image_url、电子邮件...)并直接在视图中从 Session 中读取是否合理?再次感谢。
在会话中存储特定值优于存储整个对象,但最好不需要传递 User 对象或其任何值,除非您需要专门访问它们。创建一个身份验证门面来处理身份验证。文档说明了如何创建外观:laravel.com/docs/5.0/facades【参考方案2】:
对于 laravel 5.7 及以上版本,使用@auth 和@guest 指令。这里是官方文档here
@auth
// The user is authenticated...
@endauth
@guest
// The user is not authenticated...
@endguest
您可以指定在使用@auth
和@guest
指令时应检查的身份验证保护:
@auth('admin')
// The user is authenticated...
@endauth
@guest('admin')
// The user is not authenticated...
@endguest
否则,您可以使用@unless 指令:
@unless (Auth::check())
You are not signed in.
@endunless
【讨论】:
【参考方案3】:新版本的 Laravel(撰写本文时为 5.6)在 Blade 中支持这两个指令:
@auth
// The user is authenticated...
@endauth
@guest
// The user is not authenticated...
@endguest
在此处查看官方文档: https://laravel.com/docs/5.6/blade
【讨论】:
【参考方案4】:你也可以使用Auth::guest()
Auth::guest()
方法返回 true 或 false。
示例 -
@if (Auth::guest())
<a href=" route('login') ">Login</a>
<a href=" route('register') ">Register</a>
@else
Auth::user()->name
<a href=" route('logout') ">Logout</a>
@endif
【讨论】:
【参考方案5】:这应该会有所帮助:
@extends(Auth::check() ? 'partials.navbarlogged' : 'partials.navbar')
Auth::check()
查看用户是否登录并返回一个布尔值。
【讨论】:
【参考方案6】:从 Laravel 5.4 开始,有新的刀片指令 @includeWhen
包括基于给定布尔条件的视图:
@includeWhen(Auth::check(), 'partials.navbarlogged')
@includeWhen(Auth::guest(), 'partials.navbar')
【讨论】:
【参考方案7】:如果您使用 Laravel 5 的内置用户模型,您可以简单地这样做:
@if (Auth::check())
//show logged in navbar
@else
//show logged out navbar
@endif
【讨论】:
以上是关于Laravel 5:如果用户登录,则更改导航栏的主要内容,如果未能解决你的问题,请参考以下文章
用户在 Vue.js 和 Firebase 中注册后更改导航栏的状态