web-dev-qa-db-fra.com

Laravel : Comment insérer le premier utilisateur dans la base de données

J'utilise Laravel (4.2)

Je travaille sur un projet avec un système d'authentification. Je dois insérer un premier utilisateur dans la table des utilisateurs. Je voudrais le faire directement avec une commande SQL (insérer dans les utilisateurs ....). Parce que ce premier utilisateur ne peut pas être créé avec les méthodes laravel traditionnelles.

Ce premier utilisateur sera identifié avec la méthode auth :: tentatives, après avoir été inséré dans la table. 

Comment insérer cet utilisateur dans la table mysql? 

quelque chose comme?

insert into  users (login, password) values ('admin', 'crypted password which can be later identified with laravel')
13
Dom

Je le fais de cette façon:

création de semoir avec artisan:

php artisan make:seeder UsersTableSeeder

puis vous ouvrez le fichier et vous entrez les utilisateurs:

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'User1',
            'email' => '[email protected]',
            'password' => bcrypt('password'),
        ]);
        DB::table('users')->insert([
            'name' => 'user2',
            'email' => '[email protected]',
            'password' => bcrypt('password'),
        ]);
    }
}

Si vous voulez générer une liste aléatoire d'utilisateurs, vous pouvez utiliser des usines:

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\User::class, 50)->create();
        /* or you can add also another table that is dependent on user_id:*/
       /*factory(App\User::class, 50)->create()->each(function($u) {
            $userId = $u->id;
            DB::table('posts')->insert([
                'body' => str_random(100),
                'user_id' => $userId,
            ]);
        });*/
    }
}

Ensuite, dans le fichier app/database/seed/DatabaseSeeder.php, supprimez la mise en commentaire ou l'ajout d'une fonction d'exécution à une ligne:

$this->call(UsersTableSeeder::class);

il ressemblera à ceci:

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);
    }
}

A la fin vous courez:

php artisan db:seed

ou 

php artisan db:seed --class=UsersTableSeeder

J'espère que ça va aider quelqu'un . PS: cela a été fait le Laravel 5.3 

29
Angel M.

Si vous souhaitez enregistrer de manière non sécurisée le mot de passe d'un utilisateur au format texte dans un référentiel ou sur votre serveur, je vous suggère de créer une commande pour créer des utilisateurs pour vous.

Voir Laravel docs: https://laravel.com/docs/5.6/artisan#generating-commands

Dans la méthode des poignées, ajoutez quelque chose comme ceci:

public function handle()
{
    $first_name = $this->ask('What is the first name?');
    $last_name = $this->ask('What is the last name?');
    $email = $this->ask('What is the email address?');
    $password = $this->secret('What is the password?');

    AdminUser::create([
        'first_name' => $first_name,
        'last_name' => $last_name,
        'email' => $email,
        'password' => bcrypt($password)
    ]);

    $this->info("User $first_name $last_name was created");
}

Vous êtes alors capable d'exécuter la commande à partir du serveur et vous n'avez rien enregistré dans un format texte!

5
Jammer

Trouver une solution sur le site web

http://connectonline.in/add-new-user-to-laraultedabase/

Veuillez vérifier l'URL ci-dessus,

En utilisant l'outil de bricolage artisan php, nous pourrions ajouter un nouvel utilisateur directement à la base de données.

$user = new App\User();
$user->password = Hash::make('password here ');
$user->email = 'proposed [email protected]';
$user->save();
5
Selestin Thomas

Pour mot de passe, ouvrez le terminal à la racine de votre projet . Ensuite, écrivez php artisan tinker. Puis echo Hash::make('password');

3
despotbg

Le moyen le plus raisonnable consiste à utiliser DatabaseSeeder pour une telle action. 

Je vais utiliser l'exemple directement de la documentation:

class DatabaseSeeder extends Seeder {

    public function run()
    {
        $this->call('UserTableSeeder');

        $this->command->info('User table seeded!');
    }

}

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        User::create(array('login' => 'admin', 'password' => Hash::make('secret')));
    }
}

Après avoir créé un tel semoir, après php artisan migrate, vous pouvez exécuter php artisan db:seed et votre premier utilisateur sera créé

Référence: Base de données d'ensemencement dans Laravel

2
Marcin Nabiałek

Placez les valeurs nécessaires dans le fichier .env.
INITIAL_USER_PASSWORDHASH est bcrypt et doit être généré par les utilisateurs.
Votre application devrait fournir un moyen simple. 

Vous ne voulez pas enregistrer les fichiers cleartext pws dans ce fichier.
Sinon, vous annuleriez de le sauvegarder dans bcrypt dans la base de données.

INITIAL_USER_NAME=
INITIAL_USER_EMAIL=
INITIAL_USER_PASSWORDHASH=

Ensuite, comme suggéré dans les autres réponses avant d’utiliser un semoir:
php artisan make:seeder UsersTableSeeder

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
  /**
   * Run the database seeds.
   *
   * @return void
   */
  public function run()
  {
    DB::table('users')->insert([
      'name' => env('INITIAL_USER_NAME'),
      'email' => env('INITIAL_USER_EMAIL'),
      'password' => env('INITIAL_USER_PASSWORDHASH'),
    ]);
  }
}

Vous devez ensuite entrer la graine dans le fichier database/seed/DatabaseSeeder.php pour qu’elle soit appelée à chaque exécution de la graine:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
      $this->call([
        UsersTableSeeder::class
      ]);
    }
}

Ensuite:
composer dump-autoload

Et enfin pour un appel de semences manuel:
php artisan db:seed

1
Martin Eckleben