PHPackages                             componist/auth - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. componist/auth

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

componist/auth
==============

Livewire-based authentication for Laravel. Ready-made UI for login, registration, password reset, email verification, and email-based 2FA, with rate limiting, session hardening, and feature flags.

095PHP

Since May 28Pushed 1mo agoCompare

[ Source](https://github.com/componist/auth)[ Packagist](https://packagist.org/packages/componist/auth)[ RSS](/packages/componist-auth/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Componist Auth
==============

[](#componist-auth)

Livewire-basiertes Authentifizierungs-Package für Laravel-Anwendungen. Es liefert fertige UI-Komponenten für Login, Registrierung, Passwort-Reset, E-Mail-Verifizierung und E-Mail-basierte Zwei-Faktor-Authentifizierung (2FA) — inklusive Rate-Limiting, Session-Härtung und konfigurierbaren Feature-Flags.

---

Schnellstart (Schritt für Schritt)
----------------------------------

[](#schnellstart-schritt-für-schritt)

### 1. Package installieren

[](#1-package-installieren)

```
composer require componist/auth
```

Der `AuthServiceProvider` wird per Laravel Package Discovery automatisch geladen.

**Monorepo / lokales Path-Repository:**

```
{
    "repositories": [
        { "type": "path", "url": "packages/componist/auth" }
    ],
    "require": {
        "componist/auth": "@dev"
    }
}
```

```
composer update componist/auth
```

### 2. Config publishen (empfohlen)

[](#2-config-publishen-empfohlen)

```
php artisan vendor:publish --tag=componist.auth.publish.config
```

Erzeugt `config/componist_auth.php`. Ohne Publish gilt die Default-Config aus dem Package.

### 3. Migrationen ausführen

[](#3-migrationen-ausführen)

Das Package lädt Migrationen automatisch. Sie erweitern `users` um `two_factor_code`, `two_factor_expires_at` und `last_login`.

```
php artisan migrate
```

### 4. User-Model anpassen

[](#4-user-model-anpassen)

Trait und Contract einbinden; bei E-Mail-Verifizierung zusätzlich `MustVerifyEmail`:

```
use Componist\Auth\Contracts\TwoFactorAuthenticatable;
use Componist\Auth\Traits\AddComponistAuthentication;
use Illuminate\Auth\MustVerifyEmail;

class User extends Authenticatable implements TwoFactorAuthenticatable
{
    use AddComponistAuthentication, MustVerifyEmail, /* … */;

    protected $hidden = ['password', 'remember_token', 'two_factor_code'];

    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'two_factor_expires_at' => 'datetime',
            'password' => 'hashed',
        ];
    }
}
```

Details: [User-Model einrichten](#user-model-einrichten).

### 5. Config &amp; `.env` anpassen

[](#5-config--env-anpassen)

In `config/componist_auth.php` mindestens prüfen:

EinstellungBedeutung`home`Named Route nach Login (z. B. `dashboard.index`)`layouts-app`**Pflicht** — Layout-View oder Blade-Component für Auth-Views ([`layouts-app`](#layout-layouts-app))`user_model`Dein `App\Models\User`Optional in `.env`:

```
COMPONIST_AUTH_VERIFICATION=false
COMPONIST_AUTH_TWO_FACTOR=false
COMPONIST_AUTH_REGISTER=true
COMPONIST_AUTH_RESET_PASSWORDS=true
```

### 6. `Authenticate`-Middleware in der App

[](#6-authenticate-middleware-in-der-app)

Eigene Middleware anlegen und als `auth`-Alias registrieren, damit Verify- und 2FA-Checks auf allen geschützten Routen laufen:

- `app/Http/Middleware/Authenticate.php` — siehe [Integration](#integration-in-deine-laravel-anwendung)
- `bootstrap/app.php`: `'auth' => Authenticate::class`

`redirectGuestsTo()` ist **nicht** nötig — das Package setzt Gäste-Redirects auf `route('login')`.

### 7. Geschützte Routen definieren

[](#7-geschützte-routen-definieren)

```
Route::middleware(['auth'])->group(function () {
    Route::view('dashboard', 'dashboard')->name('dashboard.index');
});
```

Auth-Routen (`/login`, `/register`, `/logout`, …) registriert das Package automatisch.

### 8. Views publishen (optional)

[](#8-views-publishen-optional)

Nur nötig, wenn du die UI anpassen willst:

```
php artisan vendor:publish --tag=componist.auth.publish.views
```

Overrides liegen unter `resources/views/vendor/componistAuth/`.

### 9. Mailer konfigurieren

[](#9-mailer-konfigurieren)

Für **2FA** und **E-Mail-Verifizierung** muss `MAIL_*` in `.env` korrekt sein und Mails zugestellt werden können.

### 10. Prüfen &amp; loslegen

[](#10-prüfen--loslegen)

```
php artisan route:list --name=componist.auth.login
```

Im Browser: `/login` aufrufen, einloggen, Redirect auf `config('componist_auth.home')`.

**Logout in Blade:**

```
Abmelden
{{-- oder --}}

```

Produktion: [Produktions-Checkliste](#produktions-checkliste).

---

Inhaltsverzeichnis
------------------

[](#inhaltsverzeichnis)

- [Schnellstart (Schritt für Schritt)](#schnellstart-schritt-f%C3%BCr-schritt)
- [Funktionen](#funktionen)
- [Anforderungen](#anforderungen)
- [Installation](#installation)
- [Konfiguration](#konfiguration)
- [Layout (`layouts-app`)](#layout-layouts-app)
- [User-Model einrichten](#user-model-einrichten)
- [Integration in deine Laravel-Anwendung](#integration-in-deine-laravel-anwendung)
- [Routen](#routen)
- [Middleware](#middleware)
- [Abläufe](#abl%C3%A4ufe)
- [Views anpassen](#views-anpassen)
- [Sicherheit](#sicherheit)
- [Produktions-Checkliste](#produktions-checkliste)
- [Tests &amp; Qualitätssicherung](#tests--qualit%C3%A4tssicherung)
- [Architektur](#architektur)
- [Lizenz](#lizenz)

---

Funktionen
----------

[](#funktionen)

BereichBeschreibung**Login**E-Mail/Passwort, „Angemeldet bleiben“, Session-Regeneration nach erfolgreichem Login**Registrierung**Optional per Config/Env abschaltbar (Standard: in Production deaktiviert)**Passwort vergessen**Laravel `Password`-Broker, neutrale Antwort (keine User-Enumeration)**Passwort zurücksetzen**Token-basierter Reset via Livewire**E-Mail-Verifizierung**Optional; Laravel `MustVerifyEmail` + signierte Verify-Route**2FA (E-Mail-OTP)**6-stelliger Code per E-Mail, SHA-256-Hash in der DB, 10 Min. Gültigkeit**Logout**`LogoutController` unter `/logout` (`GET`/`POST`); Session invalidieren + CSRF-Token erneuern; Blade-Komponente `logout-form` (GET-Link)**Rate-Limiting**Login, Register, Forgot Password, 2FA, Verify**Feature-Flags**Register, Reset, Verification, 2FA unabhängig schaltbar**Views**Publishbar; Vendor-Overrides unter `resources/views/vendor/componistAuth`---

Anforderungen
-------------

[](#anforderungen)

- PHP 8.2+
- Laravel 11 oder 12
- [Livewire](https://livewire.laravel.com/) 4.x (`^4.0`, inkl. `Route::livewire()`)
- Eloquent `users`-Tabelle mit Standard-Laravel-Auth-Feldern
- Funktionierender Mailer (für 2FA und Verifizierung)

---

Installation
------------

[](#installation)

Die vollständige Einrichtung in der empfohlenen Reihenfolge steht im [Schnellstart](#schnellstart-schritt-f%C3%BCr-schritt). Kurzüberblick:

SchrittBefehl / AktionInstallieren`composer require componist/auth`Config`php artisan vendor:publish --tag=componist.auth.publish.config`Migrationen`php artisan migrate` (Spalten siehe Tabelle unten)Views (optional)`php artisan vendor:publish --tag=componist.auth.publish.views`**Publish-Tags:**

TagZiel`componist.auth.publish.config``config/componist_auth.php``componist.auth.publish.views``resources/views/vendor/componistAuth/…`Publizierte Views haben **Vorrang** vor den Package-Views (Namespace `componistAuth`).

### Migrationen (`users`-Erweiterung)

[](#migrationen-users-erweiterung)

SpalteTypZweck`two_factor_code``string(64)`, nullableSHA-256-Hash des OTP`two_factor_expires_at``timestamp`, nullableAblauf des Codes`last_login``timestamp`, nullableLetzter Login-ZeitpunktDas Package enthält zwei Migrationen: die initiale Erweiterung der `users`-Tabelle und (falls bereits installiert) eine Anpassung des Spaltentyps `two_factor_code` für MySQL (`VARCHAR(64)`).

---

Konfiguration
-------------

[](#konfiguration)

Alle Einstellungen unter dem Config-Key `componist_auth` (Datei `config/componist_auth.php`).

### Umgebungsvariablen

[](#umgebungsvariablen)

VariableStandardBeschreibung`COMPONIST_AUTH_VERIFICATION``false`E-Mail-Verifizierung nach Login/Register`COMPONIST_AUTH_TWO_FACTOR``false`E-Mail-OTP nach Login`COMPONIST_AUTH_REGISTER``true` außer ProductionÖffentliche Registrierung`COMPONIST_AUTH_RESET_PASSWORDS``true`Passwort-vergessen-Flow### Config-Datei (Auszug)

[](#config-datei-auszug)

```
return [
    'verification' => (bool) env('COMPONIST_AUTH_VERIFICATION', false),
    'two-factor' => (bool) env('COMPONIST_AUTH_TWO_FACTOR', false),
    'home' => 'dashboard.index', // Named Route nach erfolgreichem Login
    'routes' => [
        'login' => 'componist.auth.login',
        'verification_notice' => 'componist.auth.verification.notice',
    ],
    'layouts-app' => \Componist\Core\View\Components\GuestLayout::class, // Pflicht — siehe Abschnitt unten
    'user_model' => \App\Models\User::class,
    'features' => [
        'register' => (bool) env('COMPONIST_AUTH_REGISTER', env('APP_ENV') !== 'production'),
        'resetPasswords' => (bool) env('COMPONIST_AUTH_RESET_PASSWORDS', true),
    ],
    'login' => [
        'example' => [
            'email' => null,   // Nur außerhalb production – niemals echte Credentials setzen
            'password' => null,
        ],
    ],
];
```

### Wichtige Config-Keys

[](#wichtige-config-keys)

KeyBeschreibung`home`Named Route für Redirects nach Login, Verify, 2FA`routes.login`Primärer Routenname für Login und Gäste-Redirects (`ComponistAuthConfig::loginRoute()`)`routes.verification_notice`Routenname für Verify-Hinweis (`ComponistAuthConfig::verificationNoticeRoute()`)`layouts-app`**Pflicht** — siehe [Layout (`layouts-app`)](#layout-layouts-app)`user_model`Muss `Model`, `Authenticatable` und `TwoFactorAuthenticatable` erfüllen`features.register`Bei `false`: Register-Route liefert 404`features.resetPasswords`Bei `false`: Forgot-Password-Route liefert 404### Layout (`layouts-app`)

[](#layout-layouts-app)

Der Config-Key `layouts-app` ist **verpflichtend**. Alle Auth-Livewire-Seiten (Login, Register, Passwort-Reset, Verify, 2FA) rendern ihre Inhalte über das Trait `RendersAuthView`: Die View wird per `view()->extends(…)` in dein Layout **eingebettet** (Section `content`). Der Wert ist ein **nicht-leerer String** — typischerweise ein **View-Name** (z. B. `layouts.guest`) oder die FQCN einer Blade-Component, deren View `@yield('content')` bereitstellt. Fehlt das Layout oder die Section `content`, schlagen Auth-Seiten mit einem View-Fehler fehl.

#### Standard (Componist Core)

[](#standard-componist-core)

Die Package-Default-Config verweist auf:

```
'layouts-app' => \Componist\Core\View\Components\GuestLayout::class,
```

Dafür muss das Paket **`componist/core`** (bzw. die Klasse `GuestLayout`) in der Host-App verfügbar sein — z. B. per `composer require` oder Path-Repository im Monorepo. Ohne dieses Paket **musst** du ein eigenes Layout eintragen (View-Name oder eigene Component).

#### Eigenes Layout anlegen

[](#eigenes-layout-anlegen)

Wenn `GuestLayout` nicht existiert oder du ein anderes Design willst:

**Variante A — Blade-View (empfohlen, einfachste Integration):**

1. Layout-View mit Section `content` anlegen, z. B. `resources/views/layouts/guest.blade.php`:

```
{{-- resources/views/layouts/guest.blade.php --}}

    {{ $title ?? config('app.name') }}
    @vite(['resources/css/app.css', 'resources/js/app.js'])
    @livewireStyles

    @yield('content')

    @livewireScripts

```

2. In der Config: `'layouts-app' => 'layouts.guest'`

**Variante B — Blade-Component:**

```
php artisan make:component GuestLayout
```

3. **Layout-View** der Component mit Section `content`:

```
{{-- resources/views/components/guest-layout.blade.php --}}

    {{ $title ?? config('app.name') }}
    @vite(['resources/css/app.css', 'resources/js/app.js'])
    @livewireStyles

    @yield('content')

    @livewireScripts

```

4. **Config** nach dem Publishen anpassen (Variante B):

```
use App\View\Components\GuestLayout;

'layouts-app' => GuestLayout::class,
```

Das Layout **muss** `@yield('content')` bereitstellen. Layouts nur mit `$slot` (ohne `@yield`) funktionieren mit `RendersAuthView` nicht.

#### Checkliste

[](#checkliste)

- `config/componist_auth.php` publiziert und `layouts-app` gesetzt
- Der eingetragene View-Name bzw. die Component existiert und ist auflösbar
- Layout-View enthält `@yield('content')`
- Im Browser `/login` lädt ohne View-/Component-Fehler

---

User-Model einrichten
---------------------

[](#user-model-einrichten)

Das User-Model muss das Contract `TwoFactorAuthenticatable` implementieren und den Trait `AddComponistAuthentication` verwenden. Für E-Mail-Verifizierung wird `MustVerifyEmail` benötigt.

```
