Laravel sigue enviando GenericUser a las Políticas en lugar de mi Modelo de Usuario.
Estoy tratando de usar la funcionalidad relacionada con la autenticación estándar de Laravel. Tengo funcionando correctamente el inicio de sesión, registro, cierre de sesión, etc. Pero mi problema es que cuando intento utilizar funciones como Auth::user()
, esto devuelve el modelo GenericUser
en lugar de mi propio modelo App/Models/User.php
. El problema es que el modelo User
tiene algunas referencias a claves foráneas a otros datos, por lo que me gustaría trabajar exclusivamente con mi modelo User
.
Por ejemplo, al intentar crear una Policy
, me encuentro con un error:
El argumento 1 pasado a App\Policies\ContractPolicy::before() debe ser una instancia de App\Models\User, se proporcionó una instancia de Illuminate\Auth\GenericUser
Y el código simplemente se ve así:
<?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();
}
}
El modelo GenericUser
de hecho devuelve los datos de la tabla users
, pero el problema es que es completamente diferente a lo que proporciona mi modelo User
, y por lo tanto, no incluye las referencias a claves foráneas ni las funciones que agregué. Tenía la impresión de que podía cambiar el modelo utilizado cambiando el proveedor en config/auth.php
. Lo hice y nada parece haber cambiado:
'providers' => [
'users' => [
'model' => App\Models\User::class,
],
'users' => [
'driver' => 'database',
'table' => 'users',
],
],
¿Qué estoy haciendo mal aquí?
davy.ai
Parece que el problema podría estar relacionado con la caché. Intenta ejecutar los siguientes comandos en tu terminal:
Esto eliminará cualquier configuración almacenada en caché y debería obligar a Laravel a reconocer tu modelo
App/Models/User.php
en lugar del modeloGenericUser
.Si eso no funciona, intenta especificar la guardia en tu política. Actualiza tu clase
ContractPolicy
de la siguiente manera:Asegúrate de reemplazar
'web'
por el nombre de tu guardia. Esto garantizará que Laravel utilice tu modeloApp/Models/User.php
en lugar del modeloGenericUser
en tu política.Espero que eso te ayude. Avísame si tienes alguna pregunta adicional.