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 migrateL'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.