Laravel双重身份验证和@guest语句

时间:2018-08-05 11:28:58

标签: laravel

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

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

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

在我的模板中,我有一个小问题,例如,我想使用@auth('user')加载正确的视图,但是当我使用@guest时,我将一个“成员”视为访客,解释:

在我的刀刃中:

@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

1 个答案:

答案 0 :(得分:0)

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

guest检查未指定要使用的Guard,因此使用了默认Guard。这段代码无法知道默认的Guard是什至是您实际检查过的2个Guard中的一个。

抛开警卫问题,您的情况逻辑存在问题。它们不是3个独立的条件,而是相互依赖的。 它不是if this if this if 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,这是您自己的逻辑。