DEV Community

Juraj Chovan
Juraj Chovan

Posted on

Laravel: autentifikačný package JetStream a odosielanie verifikačného mailu

Ak v Laravel aplikácii používam na správu používateľa (tj.registráciu, prihlásenie sa, odhlásenie, a pod.) autentifikačný package "JetStream", je možné tento nakonfigurovať tak, aby pri registrácii nového pouźívateľa odoslal verifikačný mail. Až po jeho potvrdení je registrovaný používateľ právoplatný a schopný sa korektne prihlásiť (a odhlásiť).

0.) predpokladám, že mám vytvorenú základnú kostru Laravel aplikácie "LaravelApp" a táto je umiestnená v adresári "..\LaravelApp\".
Tiež mám k dispozícii pripravenú MySQL databázu "db01", ktorú budem s touto aplikáciou používať.

1.) najprv si nastavím v Laravel aplikácii "LaravelApp" použitie tejto databáze. V súbore ".env" si nastavím:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db01
DB_USERNAME=root
DB_PASSWORD=****
Enter fullscreen mode Exit fullscreen mode

2.) teraz si do aplikácie zinštalujem package "JetStream" - v aplikačnom/projektovom adresári spustiť príkaz:

composer require laravel/jetstream
Enter fullscreen mode Exit fullscreen mode

čím sa tento package zinštaluje

3.) je potrebné ešte spustiť príkaz:

php artisan jetstream:install livewire
Enter fullscreen mode Exit fullscreen mode

čo vytvorí migračné skripty, zinštaluje package "livewire/livewire" a (aktualizuje) niektoré ďalšie package, vypublikuje asset-y a vybuild-uje "vite v5.4.11" (12/2024) (pre produkciu)

4.) pred spustením samotnej migrácie je potrebné ešte upraviť v súbore:

\app\Providers\AppServiceProvider.php
Enter fullscreen mode Exit fullscreen mode

kód takto:

...
use Illuminate\Support\Facades\Schema;
...
    public function boot(): void    {
        Schema::defaultStringLength(191);
    }
...
Enter fullscreen mode Exit fullscreen mode

a v konfiguračnom súbore:

\config\database.php

Enter fullscreen mode Exit fullscreen mode

upraviť kód:

'connections' => [
    ...
    'mysql' => [
        ...
        'engine' => 'InnoDB',
...
Enter fullscreen mode Exit fullscreen mode

to je preventívna oprava, lebo inak je pri migrácii vypisovaná chyba databázových štruktúr a dát:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
Enter fullscreen mode Exit fullscreen mode

5.) v prípade ak si potrebujem ešte zmeniť názov db-tabuľky do ktorej sa budú zapisovať registrovaní (a prihlásovaní) používatelia - viď postup uvedený v "Laravel: Prístup viacerých aplikácii na rovnakú databázu" v sekcii "C.) Tretia aplikácia "LaravelApp03" využivajúca JetStream package na autentifikáciu a manažovanie používateľa" (od bodu 5.)

6.) a teraz je možné už spustiť migračné skripty, príkazom:

php artisan migrate
Enter fullscreen mode Exit fullscreen mode

čím sa v databáze "db01" je vytvorená požadovaná db-tabuľka/y

7.) a teraz je čas, nastaviť si/nakonfigurovať package "JetStream" tak aby odosielal verifikačné maily pri registrácii nového používateľa.
V súbore:

\config\fortify.php
Enter fullscreen mode Exit fullscreen mode

si najprv odkomentovať vlastnosť "emailVerification()":

...
    'features' => [
        Features::registration(),
        Features::resetPasswords(),
        Features::emailVerification(),
...
Enter fullscreen mode Exit fullscreen mode

8.) a v súbore modelu "User":

\app\Models\User.php
Enter fullscreen mode Exit fullscreen mode

tiež pridať/odkomentovať použitie "MustVerifyEmail" a pridať do definície class-u:

<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
...
class User extends Authenticatable implements MustVerifyEmail   {
...
Enter fullscreen mode Exit fullscreen mode

9.) samozrejme musím mať v tejto Laravel aplikácii nastavené parametre na odosielanie mailov - napr.cez nejaký externý SMTP server/službu.
Toto nastavenie bude definované v konfiguračnom súbore ".env", napr.ak používam službu "MailTrap.io" to môže byť niečo také:

...
MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=NejakyUcetNaMailTrapSluzbe
MAIL_PASSWORD=*****
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="NejakyMail@laravelapp.to"
MAIL_FROM_NAME="${APP_NAME}"

Enter fullscreen mode Exit fullscreen mode

10.) ak teraz spustím v aplikácii developovací server príkazom:

php artisan serve
Enter fullscreen mode Exit fullscreen mode

a spustiť v prehliadači URL:

http://localhost:8000/
Enter fullscreen mode Exit fullscreen mode

zobrazí sa bežiaca Laravel aplikácia, kde mám k dispozícii aj "Login" a "Register".
Ak zaregistrujem nového používateľa, zobrazí sa na stránke info:

Image description

po verifikácii registrácie sa v db-tabuľke (pre info o registrovaných používateľoch) aktualizuje hodnota stlpca "email_verified_at", a registrovaný používateľ sa už vie priamo prihlásiť do tejto Laravel aplikácie.

Top comments (0)