36

我正在使用 Laravel (4.2)

我正在开发一个带有身份验证系统的项目。我需要在我的用户表中插入第一个用户。我想直接使用 sql 命令(插入用户......)来做到这一点。因为无法使用传统的 laravel 方法创建第一个用户。

将第一个用户插入到表中后,将使用 auth::attempts 方法进行标识。

如何将此用户插入 mysql 表?

就像是?

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

7 回答 7

74

我是这样做的:

与工匠一起创建播种机:

php artisan make:seeder UsersTableSeeder

然后打开文件并输入用户:

use Illuminate\Database\Seeder;

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

如果要生成随机用户列表,可以使用工厂:

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,
            ]);
        });*/
    }
}

然后在文件 app/database/seeds/DatabaseSeeder.php 中取消注释或在运行函数中添加一行:

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

它看起来像这样:

use Illuminate\Database\Seeder;

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

最后你运行:

php artisan db:seed

或者

php artisan db:seed --class=UsersTableSeeder

我希望能帮助某人。PS:这是在 Laravel 5.3 上完成的

于 2016-10-02T16:14:51.097 回答
16

对于密码,在终端中打开项目的根目录。

然后运行php artisan tinker;

然后echo Hash::make('password');

于 2018-03-23T15:13:29.580 回答
13

将以下值放入.env文件中。

INITIAL_USER_PASSWORDHASHbcrypt并且必须由用户生成。

您可以使用https://bcrypt-generator.com/作为在线生成器工具在应用程序之外创建密码。

您的应用程序应该提供一种更简单的方法。

您不想在文件 中保存明文密码。env

INITIAL_USER_NAME=
INITIAL_USER_EMAIL=
INITIAL_USER_PASSWORDHASH=

然后在使用播种机之前按照其他答案中的建议:

要生成播种机,composer您需要使用以下artiasn命令。

php artisan make:seeder UsersTableSeeder

此命令将在您的database/seeds文件夹中创建一个种子文件。

<?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'),
    ]);
  }
}

您将需要编辑您的database/seeds/DatabaseSeeder.php并确保UsersTableSeeder::class在方法内未提交run()

<?php

use Illuminate\Database\Seeder;

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

建议您composer dump-autoload在保存更改后运行该命令。

DatabaseSeeder.php您可以通过运行命令来运行文件内的所有种子artisan

php artisan db:seed

您也可以使用以下命令通过执行php artisan db:seed --class="UsersTableSeeder"命令仅执行一个播种机。

您还可以使用php artisan migrate:fresh --seed对数据库表进行全新迁移,并在单个命令中为表设置种子。

于 2019-01-15T17:12:13.733 回答
10

如果您担心以文本格式将用户密码不安全地保存到存储库或服务器中,我建议您创建一个命令来为您创建用户。

请参阅 Laravel 文档:https ://laravel.com/docs/7.x/artisan#generating-commands

在句柄方法中添加如下内容:

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");
}

然后,您可以从服务器运行命令,并且您没有以基于文本的格式存储任何内容!

于 2018-01-19T16:45:02.760 回答
9

使用 php artisan tinker 工具,我们可以直接将新用户添加到数据库中。

$user = new App\User();
$user->password = Hash::make('password here ');
$user->email = 'proposed email@addresss.com';
$user->save();
于 2017-06-28T08:42:13.577 回答
3

最合理的方法是使用 DatabaseSeeder 进行此类操作。

我将直接使用文档中的示例:

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')));
    }
}

创建此类播种机后,php artisan migrate您可以运行php artisan db:seed并创建您的第一个用户

参考:Laravel 中的数据库播种

于 2015-12-20T16:41:59.103 回答
1

In Laravel 5.6.39, I am doing following:

$user = new App\User();
$user->name = 'dhrubo';       //write whatever name you want
$user->password = Hash::make('dhrubo');    // write the password you want
$user->email = 'dhrubo@gmail.com';        // write the email you want
$user->save();
于 2019-05-09T15:13:20.077 回答