Mysql Laravel:如何在数据库中插入第一个用户
我正在使用Laravel(4.2) 我正在做一个有认证系统的项目。我需要在users表中插入第一个用户。我想直接用sql命令(插入到用户中…)来实现这一点。因为第一个用户不能用传统的laravel方法创建 在插入到表中之后,第一个用户将通过auth::truments方法进行标识 如何将此用户插入mysql表 什么样的Mysql Laravel:如何在数据库中插入第一个用户,mysql,laravel,laravel-4,laravel-seeding,Mysql,Laravel,Laravel 4,Laravel Seeding,我正在使用Laravel(4.2) 我正在做一个有认证系统的项目。我需要在users表中插入第一个用户。我想直接用sql命令(插入到用户中…)来实现这一点。因为第一个用户不能用传统的laravel方法创建 在插入到表中之后,第一个用户将通过auth::truments方法进行标识 如何将此用户插入mysql表 什么样的 insert into users (login, password) values ('admin', 'crypted password which can be late
insert into users (login, password) values ('admin', 'crypted password which can be later identified with laravel')
最合理的方法是使用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
并创建第一个用户
参考资料:我是这样做的:
使用artisan创建播种机:
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);
}
}
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");
}
在运行结束时:
php artisan db:seed
或
我希望你能帮助别人。
PS:这是在Laravel5.3上完成的,使用php artisan tinker工具,我们可以直接向数据库添加新用户
$user = new App\User();
$user->password = Hash::make('password here ');
$user->email = 'proposed email@addresss.com';
$user->save();
如果您担心将用户密码以文本格式不安全地保存到存储库或服务器,我建议创建一个命令来为您创建用户 见Laravel文件: 在handle方法中添加如下内容:
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class);
}
}
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");
}
然后,您就可以从服务器上运行该命令,并且您还没有以基于文本的格式存储任何内容 有关密码,请在终端中打开项目的根目录 然后运行
php工匠修补程序代码>
然后echo Hash::make('password')代码>将以下值放入.env
文件中
INITIAL\u USER\u PASSWORDHASH
是bcrypt,必须由用户生成
您可以将其用作在线生成器工具,在应用程序之外创建密码
您的应用程序应该提供一种更简单的方法
您不想将明文密码保存在env
文件中
INITIAL_USER_NAME=
INITIAL_USER_EMAIL=
INITIAL_USER_PASSWORDHASH=
然后,如使用播种机前的其他答案所示:
要使用composer
生成播种机,需要使用以下artiasn
命令
php artisan make:seeder UsersTableSeeder
此命令将创建位于数据库/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'),
]);
}
}
建议您在保存更改后运行composer dump autoload
命令
通过运行artisan
命令,可以运行DatabaseSeeder.php
文件中的所有种子
php artisan db:seed
您也可以通过执行php artisan db:seed--class=“userstableeder”
命令,使用以下命令仅执行一个种子程序
您还可以使用php artisan migrate:fresh--seed对数据库表进行新的迁移,并在单个命令中为表设置种子。在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();
是否要从Laravel
中执行SQL
?如果不是,为什么您不从phpMyAdmin
或MySql控制台执行SQL
。Laravel与路由、控制器和模型一起工作我想您在查询数据库之前已经设置好了它们Franco:不,我还没有所有这些要求。对于其他用户,我当然会有。但是对于第一个,如何将其创建到数据库中?仅在LaravelV5.6.17
中使用。谢谢@Casper谢谢,知道它在新的Laravel版本中也能工作是很有用的:)不总是用标准密码插入标准用户不是更好吗?比如说,我在写开源软件,这将是一个安全风险,因为很多用户不会改变它。我会提供一个新的答案。@martin eckleben,我认为最好插入散列密码,你不觉得吗?“$2y$10$KZ4JiywQx2e0AMd.RWBd.ONSUcfsE1Jj0dYURgGq0BIwigMAQEYuK”@Eleazar Resendez-hmm更好,但仍然不适合同样的论点。假设我写了一个开源软件,其他人只是在使用和使用一个标准的pw->可能没有人会注意到/改变这一点,很多系统都可以使用标准的pw进行攻击。我认为对于安全标准,pws总是一个糟糕的方法。使用标准pws查看所有可攻击的设备/路由器/防火墙等。要创建初始用户\u密码哈希
,请参阅@despotbg answer。