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.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay