# Laravel Fortify & Sanctum Setup

## Übersicht

Dieses Projekt wurde mit Laravel Fortify für die Authentifizierung und Laravel Sanctum für API-Token-Management konfiguriert. Die Authentifizierung verwendet Livewire-Komponenten mit Flux UI für eine moderne, reaktive Benutzeroberfläche.

## Installation

Die Pakete wurden bereits installiert und konfiguriert:

```bash
composer require laravel/fortify laravel/sanctum
```

## Konfiguration

### Fortify

-   **Konfigurationsdatei**: `config/fortify.php`
-   **Service Provider**: `app/Providers/FortifyServiceProvider.php`
-   **Aktionen**: `app/Actions/Fortify/`
-   **Livewire-Komponenten**: `resources/views/livewire/auth/`

### Sanctum

-   **Konfigurationsdatei**: `config/sanctum.php`
-   **Migrationen**: Ausgeführt
-   **User Model**: Aktualisiert mit `HasApiTokens` Trait

## Features

### Fortify Features (aktiviert)

-   ✅ Benutzerregistrierung (Livewire + Flux UI)
-   ✅ Passwort-Reset (Livewire + Flux UI)
-   ✅ Profilaktualisierung
-   ✅ Passwort-Update
-   ✅ Zwei-Faktor-Authentifizierung
-   ⚠️ E-Mail-Verifizierung (deaktiviert in der Konfiguration)

### Sanctum Features

-   ✅ API-Token-Erstellung
-   ✅ Token-Revocation
-   ✅ Geschützte API-Routen

## Technologie-Stack

-   **Laravel Fortify**: Backend-Authentifizierung
-   **Laravel Sanctum**: API-Token-Management
-   **Livewire**: Reaktive Frontend-Komponenten
-   **Flux UI**: Moderne UI-Komponenten
-   **Volt**: Livewire-Komponenten-Syntax

## Routen

### Web-Authentifizierung (portal.b2in.test)

-   `GET /login` - Anmeldeseite (Livewire)
-   `POST /login` - Anmeldung (Livewire)
-   `POST /logout` - Abmeldung
-   `GET /register` - Registrierungsseite (Livewire)
-   `POST /register` - Registrierung (Livewire)
-   `GET /forgot-password` - Passwort vergessen (Livewire)
-   `POST /forgot-password` - Passwort-Reset-Link senden (Livewire)
-   `GET /reset-password/{token}` - Passwort zurücksetzen (Livewire)
-   `POST /reset-password` - Neues Passwort setzen (Livewire)
-   `GET /verify-email` - E-Mail-Verifizierung (Livewire)
-   `GET /confirm-password` - Passwort bestätigen (Livewire)

### API-Routen (api.b2in.test)

-   `GET /api/user` - Aktueller Benutzer (geschützt)
-   `GET /api/profile` - Benutzerprofil (geschützt)
-   `POST /api/login` - API-Anmeldung (öffentlich)

## Verwendung

### Web-Authentifizierung

1. Besuchen Sie `http://portal.b2in.test/login`
2. Registrieren Sie sich oder melden Sie sich an
3. Nutzen Sie die verschiedenen Authentifizierungsfeatures

### API-Authentifizierung

1. **Token erstellen**:

```bash
curl -X POST http://api.b2in.test/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"password"}'
```

2. **Geschützte Route aufrufen**:

```bash
curl -X GET http://api.b2in.test/api/user \
  -H "Authorization: Bearer YOUR_TOKEN_HERE"
```

### Zwei-Faktor-Authentifizierung

1. Aktivieren Sie 2FA in Ihren Benutzereinstellungen
2. Scannen Sie den QR-Code mit Ihrer Authentifizierungs-App
3. Geben Sie den Code bei der Anmeldung ein

## Livewire-Komponenten

Alle Auth-Komponenten befinden sich in `resources/views/livewire/auth/`:

-   `login.blade.php` - Anmeldeseite mit Flux UI
-   `register.blade.php` - Registrierungsseite mit Flux UI
-   `forgot-password.blade.php` - Passwort vergessen mit Flux UI
-   `reset-password.blade.php` - Passwort zurücksetzen mit Flux UI
-   `verify-email.blade.php` - E-Mail-Verifizierung mit Flux UI
-   `confirm-password.blade.php` - Passwort bestätigen mit Flux UI

### Flux UI Features

-   Moderne, responsive Benutzeroberfläche
-   Eingabevalidierung in Echtzeit
-   Rate Limiting mit visuellen Feedback
-   Dark Mode Unterstützung
-   Barrierefreiheit

## Anpassungen

### Fortify-Konfiguration anpassen

Bearbeiten Sie `config/fortify.php` um Features zu aktivieren/deaktivieren:

```php
'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(), // Aktivieren für E-Mail-Verifizierung
    Features::updateProfileInformation(),
    Features::updatePasswords(),
    Features::twoFactorAuthentication([
        'confirm' => true,
        'confirmPassword' => true,
    ]),
],
```

### Livewire-Komponenten anpassen

Bearbeiten Sie die Komponenten in `resources/views/livewire/auth/`:

```php
// Beispiel: Login-Komponente anpassen
new #[Layout('components.layouts.auth')] class extends Component {
    #[Validate('required|string|email')]
    public string $email = '';

    // Ihre Anpassungen hier...
}
```

### Sanctum-Konfiguration anpassen

Bearbeiten Sie `config/sanctum.php` um Token-Einstellungen zu ändern:

```php
'expiration' => null, // Token-Ablaufzeit (null = nie)
'guard' => ['web'], // Guards für Sanctum
```

## Sicherheit

-   Alle Passwörter werden automatisch gehashed
-   CSRF-Schutz ist aktiviert
-   Rate Limiting ist konfiguriert
-   Zwei-Faktor-Authentifizierung ist verfügbar
-   API-Tokens können widerrufen werden
-   Livewire-Komponenten haben eingebaute Sicherheitsfeatures

## Nächste Schritte

1. Konfigurieren Sie E-Mail-Einstellungen in `.env` für Passwort-Reset
2. Aktivieren Sie E-Mail-Verifizierung falls gewünscht
3. Passen Sie die Livewire-Komponenten an Ihr Design an
4. Erstellen Sie zusätzliche API-Routen nach Bedarf
5. Konfigurieren Sie Flux UI Themes nach Ihren Wünschen
