Laravel:如何在数据库中插入第一个用户

问题描述 投票:0回答:9

我正在使用 Laravel (4.2)

我正在开发一个带有身份验证系统的项目。我需要将第一个用户插入我的用户表中。我想直接使用 sql 命令来执行此操作(插入用户......)。因为第一个用户无法使用传统的 Laravel 方法创建。

第一个用户在插入表后将通过 auth::attempts 方法进行识别。

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

类似的东西?

insert into  users (login, password) values ('admin', 'crypted password which can be later identified with laravel')
mysql laravel laravel-4 laravel-seeding
9个回答
83
投票

我这样做:

与工匠一起制作播种机:

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' => '[email protected]',
            'password' => bcrypt('password'),
        ]);
        DB::table('users')->insert([
            'name' => 'user2',
            'email' => '[email protected]',
            '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 中取消注释或在 run 函数中添加一行:

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


17
投票

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

然后运行

php artisan tinker;

然后

echo Hash::make('password');


15
投票

将以下值放入

.env
文件中。

INITIAL_USER_PASSWORDHASH
bcrypt 并且必须由用户生成。

您可以使用 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
对数据库表进行全新迁移,并在单个命令中为表添加种子。


13
投票

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

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

10
投票

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

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

在handle方法中添加如下内容:

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

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


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 中的数据库播种


1
投票

在 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 = '[email protected]';        // write the email you want
$user->save();

0
投票

在终端中打开项目的根目录。

如果是在Docker中,进入容器(

docker exec -it <container_name> bash
)。

然后运行

php artisan tinker

然后粘贴以下行(一行):

DB::table('users')->insert(['name' => ‘admin’, 'email' => ‘[email protected]', 'password' => Hash::make('Admin@123'),]);

登录凭据将为:

PS:如果您没有安装

tinker
,请在项目的根目录中运行
composer require laravel/tinker
命令(在容器中,如上所述)。


0
投票

如果您想通过 phpmyAdmin 创建新用户:

  • 选择用户表
  • 添加新用户
  • 选择所有字段。如果是密码,请选择 password_hash php 函数
  • 最后执行命令
  • 用户将被创建
© www.soinside.com 2019 - 2024. All rights reserved.