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
模型确实返回了users
table的数据,但问题是它和我的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' 驱动程序。此外,您已将策略方法定义为期望传递给其方法的特定模型。
我正在尝试使用标准 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
模型确实返回了users
table的数据,但问题是它和我的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' 驱动程序。此外,您已将策略方法定义为期望传递给其方法的特定模型。