Laravel Jetstream

Com utilitzar Laravel Jetstream per a aplicacions amb funcionalitats avançades d'autenticació.

Què és Jetstream?#

Jetstream és un starter kit d'autenticació més complet que Breeze. Mentre que Breeze proporciona l'essencial (login, registre, reset de contrasenya), Jetstream afegeix funcionalitats avançades que moltes aplicacions necessiten: autenticació de dos factors (2FA), gestió de sessions actives, gestió de perfil amb foto, API tokens i gestió d'equips.

Jetstream utilitza Laravel Fortify com a backend d'autenticació (sense vistes) i ofereix dues opcions de frontend: Livewire (amb Blade) o Inertia.js (amb Vue).

Instal·lació#

composer require laravel/jetstream
 
# Amb Livewire (Blade)
php artisan jetstream:install livewire
 
# Amb Inertia (Vue)
php artisan jetstream:install inertia
 
# Amb suport d'equips
php artisan jetstream:install livewire --teams
 
npm install && npm run dev
php artisan migrate

L'opció --teams activa la funcionalitat de gestió d'equips, que crea taules addicionals per a equips, membres i invitacions.

Funcionalitats#

Les funcionalitats de Jetstream es configuren al fitxer config/jetstream.php. Pots activar o desactivar cada funcionalitat:

// config/jetstream.php
use Laravel\Jetstream\Features;
 
'features' => [
    Features::profilePhotos(),       // Foto de perfil
    Features::api(),                 // API tokens
    Features::teams(),               // Gestió d'equips
    Features::accountDeletion(),     // Eliminació del compte
    Features::termsAndPrivacyPolicy(), // Termes i privacitat
],

Per desactivar una funcionalitat, simplement comenta o elimina la línia corresponent de l'array.

Autenticació de dos factors (2FA)#

Jetstream inclou autenticació de dos factors basada en TOTP (Time-Based One-Time Password), compatible amb aplicacions com Google Authenticator o Authy. L'usuari pot activar-la des de la pàgina de perfil, on Jetstream mostra un codi QR per escanejar i codis de recuperació per si perd l'accés al dispositiu.

Gestió de sessions#

La pàgina de perfil mostra totes les sessions actives de l'usuari, incloent el navegador, el sistema operatiu i la IP. L'usuari pot tancar altres sessions per protegir el seu compte.

API Tokens#

Quan la funcionalitat d'API està activada, els usuaris poden crear i gestionar tokens d'API des del panell. Cada token pot tenir permisos específics (abilities) que controlen què pot fer.

Personalització amb Actions#

Jetstream utilitza el patró "Actions" per a la lògica d'autenticació. En lloc de controladors, la lògica es troba a classes dedicades a app/Actions/:

// app/Actions/Fortify/CreateNewUser.php
namespace App\Actions\Fortify;
 
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\CreatesNewUsers;
 
class CreateNewUser implements CreatesNewUsers
{
    public function create(array $input): User
    {
        Validator::make($input, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => $this->passwordRules(),
            'terms' => ['accepted', 'required'],
        ])->validate();
 
        return User::create([
            'name' => $input['name'],
            'email' => $input['email'],
            'password' => Hash::make($input['password']),
        ]);
    }
}

Les actions principals que pots personalitzar són:

app/Actions/Fortify/
├── CreateNewUser.php           // Lògica de registre
├── UpdateUserPassword.php      // Canviar contrasenya
├── UpdateUserProfileInformation.php  // Actualitzar perfil
└── ResetUserPassword.php       // Restablir contrasenya

Personalitzar la validació de contrasenyes#

// app/Actions/Fortify/PasswordValidationRules.php
use Laravel\Fortify\Rules\Password;
 
trait PasswordValidationRules
{
    protected function passwordRules(): array
    {
        return ['required', 'string', (new Password)
            ->length(8)
            ->requireUppercase()
            ->requireNumeric()
            ->requireSpecialCharacter(),
            'confirmed',
        ];
    }
}

Breeze vs Jetstream#

Breeze és ideal quan necessites una base d'autenticació senzilla que puguis personalitzar lliurement. Tot el codi és teu i pots modificar-lo sense restriccions. Jetstream és millor quan necessites funcionalitats avançades com 2FA, gestió d'equips o API tokens de sèrie.

La diferència fonamental és l'enfocament: Breeze et dóna el codi i tu el modifiques. Jetstream et dóna un sistema configurable que personalitzes a través d'Actions i configuració. Si no estàs segur de quin triar, comença amb Breeze: és més senzill i sempre pots afegir funcionalitats manualment.