【问题标题】:Laravel : How do I insert the first user in the databaseLaravel:如何在数据库中插入第一个用户
【发布时间】:2016-03-26 17:20:27
【问题描述】:

我正在使用 Laravel (4.2)

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

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

如何将此用户插入到 mysql 表中?

类似的东西?

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

【问题讨论】:

  • 您想在Laravel 中执行SQL 吗?如果不是,为什么你不从phpMyAdminMySql-console 执行SQL
  • Laravel 使用路由、控制器和模型我想你在查询数据库之前已经设置好了这些
  • Franco : 不,我还没有所有这些要求。对于其他用户,我当然会有。但是对于第一个,如何将其创建到数据库中?

标签: mysql laravel laravel-4 laravel-seeding


【解决方案1】:

我是这样做的:

使用工匠创建播种机:

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 上完成的

【讨论】:

  • 刚刚在Laravel v5.6.17 中使用过这个。谢谢!
  • @Casper 谢谢,知道它也适用于新的 Laravel 版本很有用 :)
  • 不总是使用标准密码插入标准用户不是更好吗?假设我正在编写开源软件,这将是一个安全风险,因为很多用户不会更改它。我会提供一个新的答案。
  • @martin-eckleben,我认为最好插入散列密码,你不觉得吗? "$2y$10$KZ4JiywQx2e0AMd.RWBd.ONSUcfsE1Jj0dYURgGq0BIwigMAQEYuK"
  • @Eleazar Resendez 嗯更好,但对于相同的论点仍然不好。假设我编写了其他人只是使用并使用标准密码的开源代码-> 可能没有人会注意到/更改这一点,并且许多系统都可以使用标准密码进行攻击。我认为对于安全标准 pws 总是一个不好的方法。使用标准密码查看所有可攻击的设备/路由器/防火墙等。
【解决方案2】:

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

然后运行php artisan tinker;

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

【讨论】:

    【解决方案3】:

    将以下值放入.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 命令。

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

    php artisan db:seed

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

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

    【讨论】:

    • 要创建INITIAL_USER_PASSWORDHASH,请参阅@despotbg 答案。
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

      $user = new App\User();
      $user->password = Hash::make('password here ');
      $user->email = 'proposed email@addresss.com';
      $user->save();
      

      【讨论】:

        【解决方案6】:

        最合理的方法是使用 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 并创建您的第一个用户

        参考:Database seeding in Laravel

        【讨论】:

          【解决方案7】:

          在 Laravel 5.6.39 中,我正在执行以下操作:

          $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();
          

          【讨论】:

            猜你喜欢
            • 2016-03-19
            • 1970-01-01
            • 1970-01-01
            • 2020-08-26
            • 2023-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-31
            相关资源
            最近更新 更多