Registrar manualmente un usuario en Laravel

5 minutos de lectura

avatar de usuario
matt ellis

¿Es posible registrar manualmente a un usuario (¿con artesano?) en lugar de a través de la página de registro de autenticación?

Solo necesito un puñado de cuentas de usuario y me preguntaba si hay una forma de crearlas sin tener que configurar los controladores de registro y las vistas.

  • A través de tinker … php craft tinker

    – mercurio

    5 de marzo de 2017 a las 21:30


avatar de usuario
Christoffer Tyrefors

Creo que desea hacer esto una vez, por lo que no hay necesidad de algo sofisticado como crear un comando Artisan, etc. Sugeriría simplemente usar php artisan tinker (¡gran herramienta!) y agregue los siguientes comandos por usuario:

$user = new App\User();
$user->password = Hash::make('the-password-of-choice');
$user->email="the-email@example.com";
$user->name="My Name";
$user->save();

  • No, esto no es un comando artesanal. Esto es usando un comando artesanal.

    – Christoffer Tyrefors

    2 de marzo de 2016 a las 17:52

  • Sí, esto es bastante zen. Gracias. @maiorano84 es este paquete en L5 (laravel/framework/composer.json) github.com/bobthecow/psysh

    – Francesco de Guytenaere

    2 de marzo de 2016 a las 17:58


  • Si su proyecto también requiere nombres, use la línea $user->name = 'John Doe'; antes de save() línea.

    – Celsius1414

    21 de junio de 2017 a las 20:21


  • Es posible que también deba configurar el nombre de usuario $user->username = 'my username'; antes de $user->save()

    – Wesley Gonçalves

    27 de junio de 2019 a las 17:06


  • Laravel 8: $user = new App\Models\User();

    – ek1n8

    3 de marzo de 2021 a las 21:46

Esta es una publicación antigua, pero si alguien quiere hacerlo con la línea de comandos, en Laravel 5.*, esta es una manera fácil:

php artisan tinker

luego escriba (reemplace con sus datos):

DB::table('users')->insert(['name'=>'MyUsername','email'=>'thisis@myemail.com','password'=>Hash::make('123456')])

  • Esta es la respuesta correcta

    – vishalknishad

    5 abr a las 6:53

Sí, la mejor opción es crear una sembradora, así siempre podrás reutilizarla.

Por ejemplo, este es mi UserTableSeeder:

class UserTableSeeder extends Seeder {

public function run() {

    if(env('APP_ENV') != 'production')
    {
        $password = Hash::make('secret');

        for ($i = 1; $i <= 10; $i++)
        {
            $users[] = [
                'email' => 'user'. $i .'@myapp.com',
                'password' => $password
            ];
        }

        User::insert($users);
    }
}

Después de crear esta sembradora, debe ejecutar composer dumpautoloady luego en su database/seeds/DatabaseSeeder.php agrega lo siguiente:

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();

        $this->call('UserTableSeeder');
     }
}

Ahora finalmente puedes usar php artisan db:seed --class=UserTableSeeder cada vez que necesite insertar usuarios en la tabla.

  • mi versión de laravel es 5.4 y no hay necesidad de ‘compositor dumpautoload’ e incluso no es necesario llamar a UserTableSeeder en DatabaseSeeder. Simplemente usé el comando “php craft db:seed –class=UserTableSeeder” después de crear la clase “UserTableSeeder” como suya.

    – Avnish alok

    11/09/2018 a las 15:40


  • Esto era necesario con Laravel 5.2 en 2016.

    – usuario2094178

    12 de septiembre de 2018 a las 0:06

  • Solo una nota de que si está utilizando una sembradora como esta (con la intención de reutilizarla), lo más probable es que almacene su contraseña en texto sin formato en un repositorio de git con esta solución. Proceda con precaución y abstraiga su contraseña a una variable ambiental.

    – Sean Halls

    2 de diciembre de 2018 a las 7:15


avatar de usuario
Francesco de Guytenaere

Sí, puedes escribir fácilmente una base de datos. sembradora y siembra a tus usuarios de esa manera.

avatar de usuario
oseintow

Puedes usar Fábricas modelo para generar un par de cuenta de usuario para trabajarlo. Escribiendo un sembradora también hará el trabajo.

avatar de usuario
NicoHood

También puede crear un nuevo comando de consola que se puede llamar desde la línea de comandos. Esto es especialmente útil si desea crear nuevos usuarios bajo demanda.

Este ejemplo hace uso de laravel fortificar pero también puede utilizar su propia lógica de registro de usuario.

Primero crea una nueva comando de consola:

php artisan make:command CreateUserCommand

Luego agregue la implementación:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Actions\Fortify\CreateNewUser;

class CreateUserCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature="user:create {--u|username= : Username of the newly created user.} {--e|email= : E-Mail of the newly created user.}";

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Manually creates a new laravel user.';

    /**
     * Execute the console command.
     * https://laravel.com/docs/9.x/artisan
     *
     * @return int
     */
    public function handle()
    {
        // Enter username, if not present via command line option
        $name = $this->option('username');
        if ($name === null) {
            $name = $this->ask('Please enter your username.');
        }

        // Enter email, if not present via command line option
        $email = $this->option('email');
        if ($email === null) {
            $email = $this->ask('Please enter your E-Mail.');
        }

        // Always enter password from userinput for more security.
        $password = $this->secret('Please enter a new password.');
        $password_confirmation = $this->secret('Please confirm the password');

        // Prepare input for the fortify user creation action
        $input = [
            'name' => $name,
            'email' => $email,
            'password' => $password,
            'password_confirmation' => $password_confirmation
        ];

        try {
            // Use fortify to create a new user.
            $new_user_action = new CreateNewUser();
            $user = $new_user_action->create($input);
        }
        catch (\Exception $e) {
            $this->error($e->getMessage());
            return;
        }

        // Success message
        $this->info('User created successfully!');
        $this->info('New user id: ' . $user->id);
    }
}

Puede ejecutar el comando a través de:

php artisan user:create -u myusername -e mail@example.com

Recomiendo pedir siempre la contraseña a través de la entrada del usuario, no como parámetro para razones de seguridad.

¿Ha sido útil esta solución?