【问题标题】:Laravel double auth and @guest statementLaravel 双重身份验证和@guest 声明
【发布时间】:2019-01-12 14:28:38
【问题描述】:

我使用 Laravel 5.6,我有 2 个身份验证器:

'user' => [
    'driver' => 'session',
    'provider' => 'users',
],

'member' => [
    'driver' => 'session',
    'provider' => 'members',
],

在我的模板中,我只是有一个小问题,例如我想使用@auth('user') 来加载正确的视图,但是当我使用@guest 时,'member' 被认为是客人,我解释:

在我的刀片中:

@auth('user')
   // content for user logged
@endauth

@auth('member')
   // content for member logged
@endauth

@guest
   // content for guest only
   // but this content is shown for members logged (in addition of the @auth('member') content
@endguest

我不知道为什么,当一个会员登录时,他会看到@guest 内容和@auth('member') 内容。我需要配置其他东西吗?我想要用户身份验证的相同行为。

** 编辑 **

好的,用这种丑陋的方式,它可以工作:

@guest('member')
   @guest('user')
     // only guest
   @endguest
@endguest

【问题讨论】:

  • 这是守卫的问题..您正在检查 2 个不同的守卫,但没有明确定义guest 将使用什么守卫。因此,guest 调用“可能”没有使用您正在检查的任何防护,这意味着在此示例中您将始终拥有此部分。听起来目前默认的守卫没有登录用户。没有一般的经过身份验证的用户或访客,它总是与守卫有关......简而言之,你怎么知道guest检查使用的是什么守卫?
  • 那么,我可以为我的客人部分使用双重保护吗?或者我想如果访问者没有登录(作为成员或用户)使用条件会更简单
  • if ... elseif ... else 你的条件检查是相互依赖的,不是独立的

标签: laravel


【解决方案1】:

这是 Guards 的问题。您正在为当前用户明确检查 2 Guards。您不是在请求默认的 Guard,而是明确要求特定的 Guard。

guest 检查未指定要使用的 Guard,因此使用默认 Guard。从这段代码中无法知道默认的 Guard 是什么,或者它是否是您实际检查的 2 个 Guard 之一。

将 Guard 问题放在一边,您的条件逻辑存在问题。它们不是 3 个独立的条件,它们相互依赖。 不是if thisif thisif this,是if this, elseif this, else

@auth('user')
    ...
@elseauth('member')
    ...
@else
    ...
@endif

这是:

@if (auth()->guard('user')->check())
    ...
@elseif (auth()->guard('member')->check())
    ...
@else
    ...
@endif

在示例代码的上下文中,您定义了 guest 是什么。您将根据您的代码将其定义为未经过身份验证的usermember 的任何用户。不是守卫告诉你的是客人。你的“客人”支票不是@guest 这是你自己的逻辑。

【讨论】:

  • 顺便问一下,我可以添加一个像visitor 这样的新守卫,它会被视为无日志记录(用户既不是成员)?只是在我的模板中使用@visitor 语法?谢谢
猜你喜欢
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多