我使用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
答案 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
是什么。您正在根据代码将其定义为未经身份验证的user
或member
的任何用户。守卫告诉你的不是客人。您的“来宾”支票不是@guest
,这是您自己的逻辑。