Как добавить администратора на сайт Laravel в продакшене
Вариант 1. Laravel Tinker
Все Laravel приложения включают Tinker по умолчанию, что позволяет взаимодействовать с приложением через командную строку.
Сначала войдите в консоль своего сервера и перейдите в каталог проекта.
Чтобы войти в среду Tinker, запустите Artisan команду tinker
:
php artisan tinker
Чтобы создать пользователя, напишите PHP код, который хотите выполнить, в консоль, так же как при написании приложения.
use App\Models\User;
User::create(['name' => 'Admin', 'email' => 'admin@example.org', 'password' => bcrypt('secret')]);
Если у вас есть роли пользователей, вы можете назначить вновь созданного пользователя переменной, а затем синхронизировать/прикрепить роли. Например, если у вас есть отношение многие ко многим
, где 1
— это идентификатор роли администратора, вы можете сделать следующее:
use App\Models\User;
$user = User::create(['name' => 'Admin', 'email' => 'admin@example.org', 'password' => bcrypt('secret')]);
$user->roles()->attach(1);
Преимущества
- Не требуется дополнительное кодирование: в Laravel уже включён Tinker.
Недостатки
- Неудобно редактировать, вы можете допустить ошибку в написании команды.
- Если при настройке учётной записи задействовано много бизнес-логики, это приводит к большому количеству ручного ввода команд.
Вариант 2. Засеивание базы данных
Ещё один способ создания пользователей в системе — засеять их.
Выполните Artisan команду make:seed
, чтобы создать класс Seeder
.
php artisan make:seed UserSeeder
Затем обновите метод run()
необходимой логикой, например:
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
public function run(): void
{
$user = User::create([
'name' => 'Admin',
'email' => 'admin@example.org',
'password' => bcrypt('secret'),
]);
$user->roles()->attach(1);
}
}
После этого вы можете запустить этот Seeder
вручную для создания пользователя, используя следующую команду:
php artisan db:seed --class=UserSeeder
Или включите Seeder
в метод run()
вашего класса DatabaseSeeder
, чтобы всегда создавать этого пользователя при заполнении всей базы данных.
database/seeders/DatabaseSeeder.php:
public function run(): void
{
$this->call([
UserSeeder::class,
]);
}
Преимущества
- Удобнее писать код заранее в IDE с подсветкой синтаксиса.
- Вы можете, таким образом, создавать более одного пользователя за раз.
- Возможность запуска
Seeder
по запросу с помощью одной команды или всегда засеивать всю базу данных.
Недостатки
- Безопасность: как правило, не рекомендуется хранить какие-либо учётные данные в коде или репозитории, поэтому следует изменить пароль сразу после входа в систему.
Теперь вы можете применить это к своему сценарию.
P.S. Конечно, всегда есть третий ручной вариант: подключиться к базе данных через SQL-клиент, такой, как phpMyAdmin, и добавить данные непосредственно в БД. Это вообще не требует программирования, но довольно рискованно, потому что вы можете неправильно установить какое-то отношение или забыть зашифровать пароль. Поэтому я просто упомянул этот вариант как последнее средство
, но я бы не рекомендовал его.