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:如果用户登录,则更改导航栏的主要内容,如果未能解决你的问题,请参考以下文章

用户登录时更改导航栏

用户登录php后更改导航栏

用户在 Vue.js 和 Firebase 中注册后更改导航栏的状态

根据状态动态更改登录/注销按钮

导航栏不会根据路由条件在 app.js 中呈现。路由更改时不会触发 Useeffect

允许用户在 laravel 5.2 中进行登录后调用