Laravel 一直将 GenericUser 传递给策略而不是我的用户模型

Laravel keeps passing GenericUser to Policies instead of my User Model

我正在尝试使用标准 Laravel auth 相关功能。我有标准的登录、注册、注销等...工作正常。但我的问题是,每当我使用 Auth::user() 这样的函数时,都会返回 GenericUser 模型而不是我自己的 App/Models/User.php 模型。问题是我的用户模型有一些对其他数据的外键引用,所以我想专门使用我的 User 模型。

例如,在尝试制作 Policy 时我 运行 陷入错误:

Argument 1 passed to App\Policies\ContractPolicy::before() must be an instance of App\Models\User, instance of Illuminate\Auth\GenericUser given

代码如下所示:

<?php

namespace App\Policies;

use App\Models\Contract;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class ContractPolicy
{
    use HandlesAuthorization;

    public function before(User $user, $ability)
    {
        if ($user->isSuperAdmin()) {
            return true;
        }
    }

    public function viewAny(User $user)
    {
        return $user->isMember();
    }
}

GenericUser模型确实返回了userstable的数据,但问题是它和我的User模型给出的完全不同,因此不包括我添加的外键引用或函数。我的印象是我可以通过切换 config/auth.php 提供程序来切换使用的模型。我做了什么,但似乎没有任何改变:

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

     'users' => [
         'driver' => 'database',
         'table' => 'users',
     ],
],

我做错了什么?

您正在定义 users 提供程序以使用 'database' 驱动程序:

 'users' => [
     'driver' => 'database',
     'table' => 'users',
 ],

调整为使用 'eloquent' 驱动程序:

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

'database' 驱动程序使用 Query Builder 与数据库交互 table 和 returns GenericUser 的对象来表示当前经过身份验证的用户。

'eloquent' 驱动程序使用 Eloquent 模型与数据库交互,returns 模型实例。如果您喜欢 Eloquent 的关系和所有其他功能,那么您应该坚持使用 'eloquent' 驱动程序。此外,您已将策略方法定义为期望传递给其方法的特定模型。