V prípade, že potrebujem na rovnakú databázu (v príklade nižšie používaná - MySQL) pristupovať z viacerých Laravel aplikácii, a to tak, aby každá z nich mala vlastnú db-tabuľku používateľov a vlastný autentifikačný mechanizmus (nezávislý od druhej aplikácie) tu je návod ako to urobiť.
A.) Prvá aplikácia "LaravelApp01" využivajúca JetStream autentifikáciu a manažovanie používateľa:
1.) Najprv si vytvorím prvú Laravel aplikáciu, spustením príkazu
composer create-project laravel/laravel LaravelApp01
a v podadresári "LaravelApp01" je vytvorená základná štruktúra Laravel aplikácie.
2.) predpokladajme, že potrebnú MySQL databázu už mám vytvorenú (a volá sa "db01".
3.) túto databázu si nastavím/pripojím na ňu aplikáciu "LaravelApp01", a to skonfigurovaním aplikačného/konfiguračného súboru ".env", kde si nastavím:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=****
4.) táto prvá Laravel aplikácia bude používať autentifikáciu, registráciu a prihlasovanie cez package "JetStream", takže je potrebné si zinštalovať tento package do aplikácie "LaravelApp01" - v aplikačnom/projektovom adresári spustiť príkaz:
composer require laravel/jetstream
čím sa tento package zinštaluje
5.) ak si teraz spustím developovací server príkazom:
php artisan serve
a v prehliadači si zobrazím URL:
http://localhost:8000/
tj.úvodnú stránku aplikácie "LaravelApp01", vidím tam už aj "Log in" a "Register" odkaz, ale tieto ešte nefungujú. Aplikácia nevie nájsť "auth.login", resp."auth.register"
6.) je potrebné ešte spustiť príkaz:
php artisan jetstream:install livewire
čo vytvorí potrebné migračné skripty, zinštaluje sa package "livewire/livewire" a aktualizujú sa niektoré ďalšie package, a vypublikujú sa potrebné asset-y a vybuild-uje sa aplikácia
7.) je potrebné spustiť migráciu, tj.vytvorenie potrebných db-tabuliek a modelov, príkazom:
php artisan migrate
a v databáze "db01" sú vytvorené db-tabuľky (6ks):
- failed_jobs
- migrations
- password_reset_tokens
- personal_access_tokens
- sessions
- users
8.) ak teraz znovu spustím developovací server a URL aplikácie, už budú fungovať aj odkazy "Login" a "Register" a aj funkcionalita skrývajúca sa za nimi, tj.viem sa zaregistrovať a následne prihlásiť (a potom aj odhlásiť z aplikácie).
B.) Druhá aplikácia "LaravelApp02" využivajúca Bootstrap/UI autentifikáciu a manažovanie používateľa:
1.) opäť podobným spôsobom vytvorím aj druhú Laravel aplikáciu:
composer create-project laravel/laravel LaravelApp02
a v podadresári "LaravelApp02" je vytvorená základná štruktúra Laravel aplikácie.
2.) aplikácia "LaravelApp02" bude tiež napojená na rovnakú databázu, takže nastavenie v súbore ".env" bude tiež:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=***
3.) táto druhá Laravel aplikácia "LaravelApp02" bude na autentifikáciu a manažovanie používateľov používať package "bootstrap/ui"
4.) ale ešte pred tým, je potrebné si premenovať názov db-tabuľky, do ktorej si bude táto druhá aplikácia ukladať svojích používateľov (prvá aplikácia "LaravelApp01" má pre tento účel zriadenú default-nú db-tabuľku "users").
Pre druhú aplikáciu si zvolíme napr.názov "admins".
5.) nájsť si súbor migrácie pre "users":
\database\migrations\2014_10_12_000000_create_users_table.php
a tu zeditovať kód takto:
...
return new class extends Migration {
public function up(): void {
Schema::create('admins', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
public function down(): void {
Schema::dropIfExists('admins');
}
};
6.) prípadne - ak potrebujem, môžem doplniť nejaké ďalšie atribúty/stlpce, napr.:
...
$table->string('BusinessName');
...
7.) a ešte, kvôli konzistencii je potrebné vhodne premenovať aj tento súbor, tj.pôvodný názov:
\database\migrations\2014_10_12_000000_create_users_table.php
zmeniť na:
\database\migrations\2014_10_12_000000_create_admins_table.php
8.) teraz je čas zinštalovať package "bootstrap/ui" do aplikácie "LaravelApp02" - v aplikačnom/projektovom adresári spustiť príkaz:
composer require laravel/ui
a následne spustiť príkaz:
php artisan ui bootstrap --auth
a na koniec ešte odporúčajú spustiť:
npm install && npm run dev
9.) a teraz spustiť migračné súbory príkazom:
php artisan migrate
a v databáze "db01" sú vytvorené iba dve nové db-tabuľky:
- admins
- password_resets
db-tabuľka "admins" bude slúžiť na správu používateľov Laravel aplikácie "LaravelApp02"
10.) ešte je potrebné zmeniť/doplniť v modeli "User":
\app\Models\User.php
kód takto:
...
class User extends Authenticatable {
use HasApiTokens, HasFactory, Notifiable;
protected $table = 'admins';
...
11.) a ak som v migrácii (viď krok 6.) doplňal nejaký nový atribút, je potrebné ho doplniť aj tu v modeli:
...
protected $fillable = [
'name',
'email',
'password',
'BusinessName',
];
12.) doplniť ešte do súboru:
\config\auth.php
takýto kód:
<?php
return [
'table' => 'admins',
...
13.) a aby fungovali zápisy vkladaných hodnôt pri registrácii, je potrebné ešte zeditovať v súbore:
\app\Http\Controllers\Auth\RegisterController.php
kód takto:
...
protected function validator(array $data) {
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:admins'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
14.) ak teraz v tejto druhej Laravel aplikácii "LaravelApp02" spustím developovací server a dám si zobraziť úvodnú stránku aplikácie, tj.:
http://localhost:8000/
mám na stránke odkazy "Login" a "Register" a funkcionalita pod nimi funguje, viem sa zaregistrovať a prihlásiť (a aj odhlásiť) a údaje o registrovanom používateľovi sa zapisujú do db-tabuľky "admins"
C.) Tretia aplikácia "LaravelApp03" využivajúca JetStream package na autentifikáciu a manažovanie používateľa:
A vytvorím si ešte aj tretiu Laravel aplikáciu "LaravelApp03", ktorá bude používať (rovnako ako package "LaravelApp01") "JetStream" package na autentifikáciu používateľa.
1.) vytvorím si tretiu aplikáciu príkazom:
composer create-project laravel/laravel LaravelApp03
2.) v súbore ".env" si nastavím potrebnú databázu:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=***
3.) v databáze "db01" mám v tomto momente už vytvorené db-tabuľky:
- admins (používatelia pre druhú aplikáciu "LaravelApp02")
- failed_jobs
- migrations
- password_resets (resetovanie hesiel pre druhú aplikáciu "LaravelApp02")
- password_reset_tokens
- personal_access_tokens
- sessions
- users (používatelia pre prvú aplikáciu "LaravelApp01")
a tretia Laravel aplikácia "LaravelApp03" bude mať samostatnú db-tabuľku pre svojích používateľov, napr."members"
4.) v tretej aplikácii si zinštalovať package "JetStream" príkazom:
composer require laravel/jetstream
nasleduje príkaz:
php artisan jetstream:install livewire
čo vytvorí migračné skripty, zinštaluje package "livewire/livewire" a (aktualizuje) niektoré ďalšie package, a vypublikuje asset-y a vybuild-uje aplikáciu.
5.) v existujúcom migračnom skripte:
\database\migrations\2014_10_12_000000_create_users_table.php
si upraviť kód - zmena názvu db-tabuľky z "users" na "members":
...
return new class extends Migration {
public function up(): void {
Schema::create('members', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->foreignId('current_team_id')->nullable();
$table->string('profile_photo_path', 2048)->nullable();
$table->timestamps();
});
}
public function down(): void {
Schema::dropIfExists('members');
}
};
6.) a kvôli konzistencii si premenovať aj tento migračný súbor, tj.z:
\database\migrations\2014_10_12_000000_create_users_table.php
premenovať na:
\database\migrations\2014_10_12_000000_create_members_table.php
7.) teraz možno spustiť samotnú migráciu:
php artisan migrate
a v databáze "db01" je vytvorená nová db-tabuľka "members"
8.) ešte je potrebné zmeniť/doplniť v modeli "User":
\app\Models\User.php
doplniť názov db-tabuľky s ktorou má pracovať:
...
class User extends Authenticatable {
use HasApiTokens;
use HasFactory;
...
protected $table = 'members';
...
9.) a doplniť ešte do súboru:
\config\auth.php
odkaz/referenciu na používanú db-tabuľku:
<?php
return [
'table' => 'members',
...
10.) ak teraz spustím developovací server v rámci tretej aplikácie "LaravelApp03" a v prehliadači URL:
http://localhost:8000/
viem sa registrovať (a následne aj prihlásiť) do tejto Laravel aplikácie, a data sa zapisujú do db-tabuľky "members"
11.) mám takto vytvorené tri nezávislé aplikácie "LaravelApp01", "LaravelApp02" a "LaravelApp03", každá z nich má vlastný autentifikačný systém ("LaravelApp01" a "LaravelApp03" majú package "JetStream" a "LaravelApp02" má "bootstrap/ui") a každá z nich si svojích používateľov uchováva v samostatnej db-tabuľke ("LaravelApp01" v db-tabuľke "users", "LaravelApp02" v db-tabuľke "admins" a "LaravelApp03" v db-tabuľke "members"). Zároveň ostatné db-tabuľky (a data) môžem rovnocenne použiť vo všetkých troch aplikáciách.
Top comments (0)