> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Socialite für Discord

> Driver-Paket zur Umsetzung der Discord-OAuth2-Authentifizierung mit Laravel Socialite.

## Übersicht

[revolution/socialite-discord](https://github.com/invokable/socialite-discord) ist ein Driver-Paket, das die Nutzung der Discord-OAuth2-Authentifizierung in Laravel Socialite ermöglicht.

Zu den eingebauten Providern von Laravel Socialite gehört Discord nicht. Allein durch die Installation dieses Pakets können Sie eine Discord-Anmeldung über `Socialite::driver('discord')` zu Ihrer Anwendung hinzufügen.

<Info>
  Die grundlegende Nutzung von Laravel Socialite selbst finden Sie im [Socialite-Guide](/de/socialite).
</Info>

## Installation

```shell theme={null}
composer require revolution/socialite-discord
```

## Konfiguration

### App im Discord Developer Portal registrieren

Erstellen Sie im [Discord Developer Portal](https://discord.com/developers/applications) eine Anwendung und holen Sie sich im **OAuth2**-Bereich die Client-ID und das Client-Secret. Fügen Sie unter **Redirects** die Callback-URL hinzu (z. B. `https://example.com/auth/discord/callback`).

### config/services.php

```php theme={null}
'discord' => [
    'client_id'     => env('DISCORD_CLIENT_ID'),
    'client_secret' => env('DISCORD_CLIENT_SECRET'),
    'redirect'      => env('DISCORD_REDIRECT'),
],
```

### .env

```dotenv theme={null}
DISCORD_CLIENT_ID=your-client-id
DISCORD_CLIENT_SECRET=your-client-secret
DISCORD_REDIRECT=https://example.com/auth/discord/callback
```

## Grundlegende Verwendung

<Steps>
  <Step title="Routen definieren">
    Fügen Sie in `routes/web.php` zwei Routen für die Weiterleitung und den Callback hinzu.

    ```php theme={null}
    use App\Http\Controllers\SocialiteController;

    Route::get('auth/discord', [SocialiteController::class, 'login']);
    Route::get('auth/discord/callback', [SocialiteController::class, 'callback']);
    ```
  </Step>

  <Step title="Controller erstellen">
    ```php theme={null}
    <?php

    namespace App\Http\Controllers;

    use Laravel\Socialite\Facades\Socialite;

    class SocialiteController extends Controller
    {
        public function login()
        {
            return Socialite::driver('discord')->redirect();
        }

        public function callback()
        {
            $discordUser = Socialite::driver('discord')->user();

            // $discordUser->getId()        Discord-Benutzer-ID
            // $discordUser->getName()      Benutzername
            // $discordUser->getEmail()     E-Mail-Adresse (der email-Scope ist erforderlich)
            // $discordUser->getAvatar()    Avatar-URL
            // $discordUser->token          Access Token

            $user = \App\Models\User::updateOrCreate(
                ['discord_id' => $discordUser->getId()],
                ['name' => $discordUser->getName()]
            );

            \Illuminate\Support\Facades\Auth::login($user);

            return redirect('/dashboard');
        }
    }
    ```
  </Step>
</Steps>

## Scopes konfigurieren

In Discord OAuth2 legen Sie die abzurufenden Berechtigungen über Scopes fest. Der Standard-Scope ist nur `identify`.

```php theme={null}
public function login()
{
    return Socialite::driver('discord')
                    ->setScopes(['identify', 'email', 'guilds', 'guilds.join'])
                    ->redirect();
}
```

Wichtige Scopes im Überblick:

| Scope         | Verfügbare Informationen                             |
| ------------- | ---------------------------------------------------- |
| `identify`    | Benutzer-ID, Benutzername, Avatar (Standard)         |
| `email`       | E-Mail-Adresse                                       |
| `guilds`      | Liste der Server, in denen der Benutzer Mitglied ist |
| `guilds.join` | Berechtigung, den Benutzer einem Server hinzuzufügen |

<Tip>
  Alle Scopes finden Sie in der [Discord-OAuth2-Dokumentation](https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes).
</Tip>

## Benutzer speichern und anmelden

Ein typisches Umsetzungsbeispiel: In der Callback-Route werden die Benutzerinformationen abgerufen, in der Datenbank gespeichert und anschließend die Anmeldung durchgeführt.

```php theme={null}
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

public function callback()
{
    $discordUser = Socialite::driver('discord')->user();

    $user = User::updateOrCreate(
        ['discord_id' => $discordUser->getId()],
        [
            'name'          => $discordUser->getName(),
            'email'         => $discordUser->getEmail(),
            'discord_token' => $discordUser->token,
        ]
    );

    Auth::login($user);

    return redirect('/dashboard');
}
```

<Warning>
  Um `email` abzurufen, ist der Scope `email` erforderlich. Wenn Sie den Scope nicht angeben, kann `getEmail()` `null` zurückgeben.
</Warning>

## Vergleich mit anderen Socialite-Drivern

Dieses Paket ist auf dem offiziellen Weg über `Socialite::extend()` implementiert und lässt sich mit exakt derselben API wie die eingebauten Provider nutzen. Details zum Mechanismus für benutzerdefinierte Provider und zu `Socialite::extend()` finden Sie im [Socialite-Guide](/de/socialite).

<Info>
  Die aktuellsten Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/socialite-discord).
</Info>


## Related topics

- [Laravel Notification für Discord (Webhook)](/de/packages/laravel-notification-discord-webhook.md)
- [Socialite (LINE Login) - LINE SDK für Laravel](/de/packages/laravel-line-sdk/socialite.md)
- [Laravel Socialite (Social Authentication)](/de/socialite.md)
- [Socialite - Laravel Bluesky](/de/packages/laravel-bluesky/socialite.md)
- [LINE SDK für Laravel](/de/packages/laravel-line-sdk/index.md)
