Laravel为什么认为我以常规警卫身份而不是自定义警卫身份登录?

时间:2020-07-15 22:16:23

标签: php laravel

我通过在我的Laravel应用程序中将提供程序添加到我的auth.php文件中,创建了一个名为'business_user'的自定义防护。

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

     'business_users' => [
         'driver' => 'eloquent',
         'model' => App\BusinessUser::class,
     ],
],

在刀片模板中,我有一些自定义代码,这些代码根据登录的用户显示不同的内容。

@if (Auth::check('business_user'))
    <a class="btn btn-light" href="{{ route('user.logout') }}">Logout Business</a>&nbsp;
@elseif(Auth::check())
    <a class="btn btn-light" href="{{ route('user.logout') }}">Logout Customer</a>&nbsp;
@else
    (Guest user)
@endif

无论我是以普通用户身份登录还是企业用户登录,刀片模板始终显示第一个条件(注销企业)。

我已经验证了正确的用户保护登录,因为我可以在laravel调试栏中检查会话变量名称,从而对此进行验证。

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:0)

check方法不带参数。如果您想要guard方法所针对的特定警卫:

Auth::guard('whateveryouwant')->check();

简而言之,您的if条件和elseif正在检查相同的值。当您直接在check外观上调用Auth时,Auth Manager将使用默认防护作为防护,并在其上调用该方法。 (默认防护措施可以在运行时更改; auth中间件将设置默认防护措施)

此外,您正在显示的是用户提供程序,而不是所定义的防护。警卫将是提供者和驱动程序的组合。