首页 > 解决方案 > 如何使用方法尝试() - Laravel 7

问题描述

我试图弄清楚是如何Auth::attempt()工作的。它不会返回任何错误,但它也不起作用,只是返回 false。

我试图定义表名,我试图添加警卫,但我不确定它是如何工作的。

根据 Laravel 文档,如果我没记错的话,我应该为每个身份验证添加一个警卫(我需要使用不同的表进行身份验证)。

https://laravel.com/docs/7.x/authentication#introduction

这就是我定义新警卫的方式:(我不确定它是否与我的问题有关)

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'web' => [
        'driver' => 'session',
        'provider' => 'guest',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],

我的问题是如何验证从我想要使用的表中检索数据的用户,Auth::attempt()还是应该使用我自己的方法?

我是 Laravel 的新手,所以有点困惑。

标签: laravelauthentication

解决方案


一个明确的错误是,你不能有两个同名的守卫。

下一个错误可能是,您没有添加 provider 'guest',但这只能猜测。

我会这样做:

  1. 给您的第二个网络提供商取另一个名字。
  2. 确保您的第一个 web auth Guard 再次按预期工作
  3. 着手实施第二个网络身份验证保护

例如,您的 auth.php 可能如下所示:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'guest' => [
        'driver' => 'session',
        'provider' => 'guest',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],
    'guest' => [
        'driver' => 'eloquent',
        'model' => App\Models\Guest::class,
    ],
]

当然,您还必须定义模型Guest

然后你可以做类似的事情:

Auth::guard('web')->attempt($credentials)
// or
Auth::guard('guest')->attempt($credentials)

需要考虑的事情

有时您认为您需要不同的表进行身份验证,但实际上,使用一个基本的用户表和身份验证守卫,然后使用其他表将用户连接到更多数据和角色,这可能是一种更容易的方法。


推荐阅读