laravel - Laravel 双重身份验证和@guest 声明
问题描述
我使用 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
解决方案
这是Guards的问题。您正在为当前用户显式检查 2 Guards。您不是在请求默认的 Guard,而是明确要求特定的 Guard。
该guest
检查未指定要使用的 Guard,因此使用了默认 Guard。从这段代码中无法知道默认的 Guard 是什么,或者它是否是您实际检查的 2 个 Guard 之一。
将 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
在示例代码的上下文中,您定义了 aguest
是什么。您正在根据您的代码将其定义为任何未经身份验证的用户user
或member
. 不是守卫告诉你的是客人。您的“客人”检查不是@guest
您自己的逻辑。
推荐阅读
- javascript - Beginner - I want the scroll bar to move down with JS
- wordpress - Wordpress CLI “Warning: Some code is trying to do a URL redirect.” error
- python - robot framework library JSONlibrary import error
- java - ERROR org.apache.kafka.common.utils.KafkaThread - Uncaught exception in thread 'kafka-producer-network-thread
- c++ - Why a derived class B is said not to be a member of its parent class A?
- unit-testing - How could I mock the constructor of a node module with jest
- python - 通过已分组数据框的另一列使用 pyspark countDistinct
- python - ImportError: cannot import name 'CUDF_INSTALLED' from 'xgboost.compat'
- azure-ad-b2c - Limit user access in Azure AD B2C
- sql - 用于查找记录的 Oracle 查询