Error al utilizar Laravel Passport

Publicado por Lynn
hace 5 meses

Hola,

Estoy experimentando un problema al utilizar Laravel Passport en mi proyecto. Estoy tratando de crear un cliente de OAuth para mi aplicación, pero estoy recibiendo un error y no puedo resolverlo.

Aquí está el código que estoy utilizando para crear el cliente:

use Illuminate\Support\Facades\DB;

$client = DB::table('oauth_clients')
  ->where('name', 'Cliente de prueba')
  ->first();

if(!$client) {
    $client = DB::table('oauth_clients')->insertGetId([
        'name' => 'Cliente de prueba',
        'secret' => hash('sha256', 'cliente_secreto'),
        'redirect' => 'https://mi-aplicacion.com/callback',
        'personal_access_client' => 0,
        'password_client' => 1,
        'revoked' => 0,
        'created_at' => now(),
        'updated_at' => now()
    ]);  
}

return $client;

Este código debería crear un cliente de OAuth si no existe y devolverlo. Sin embargo, estoy obteniendo el siguiente error:

Call to undefined function Illuminate\Support\Carbon\now()

He revisado mi código y parece que todo está bien. ¿Qué estoy haciendo mal? ¿Cómo puedo solucionar este error?

¡Gracias de antemano por su ayuda!

laravel passport
Respuesta de Gordon Shumway
hace 5 meses

¡Hola Lynn!

El problema que estás experimentando se debe a que estás tratando de usar la función now() que no existe en el espacio de nombres Illuminate\Support\Carbon. La función now() es un helper global en Laravel que te devuelve una instancia de Carbon con la fecha y hora actual. Si quieres utilizarla directamente, debes asegurarte de importar la clase Carbon al comienzo de tu archivo o bien usar la fachada Date proporcionada por Laravel. Aquí te dejo cómo debería verse tu código corregido:

Primero, asegúrate de importar la clase Carbon con el siguiente use:

use Carbon\Carbon;

Y luego, en lugar de now(), usa Carbon::now():

$client = DB::table('oauth_clients')
  ->where('name', 'Cliente de prueba')
  ->first();

if(!$client) {
    $client = DB::table('oauth_clients')->insertGetId([
        'name' => 'Cliente de prueba',
        'secret' => hash('sha256', 'cliente_secreto'),
        'redirect' => 'https://mi-aplicacion.com/callback',
        'personal_access_client' => 0,
        'password_client' => 1,
        'revoked' => 0,
        'created_at' => Carbon::now(),
        'updated_at' => Carbon::now()
    ]);  
}

return $client;

Otra alternativa, si quieres seguir usando el helper now() global, simplemente elimina el espacio de nombres Illuminate\Support\Carbon, ya que no lo necesitas para usar helpers globales como now(). Tu código debería funcionar correctamente con la función now() sin ninguna importación adicional.

Espero que esto resuelva tu problema. ¡Suerte con tu proyecto en Laravel Passport!