Zum Hauptinhalt springen

Übersicht

revolution/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.
Die grundlegende Nutzung von Laravel Socialite selbst finden Sie im Socialite-Guide.

Installation

composer require revolution/socialite-discord

Konfiguration

App im Discord Developer Portal registrieren

Erstellen Sie im Discord Developer Portal 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

'discord' => [
    'client_id'     => env('DISCORD_CLIENT_ID'),
    'client_secret' => env('DISCORD_CLIENT_SECRET'),
    'redirect'      => env('DISCORD_REDIRECT'),
],

.env

DISCORD_CLIENT_ID=your-client-id
DISCORD_CLIENT_SECRET=your-client-secret
DISCORD_REDIRECT=https://example.com/auth/discord/callback

Grundlegende Verwendung

1

Routen definieren

Fügen Sie in routes/web.php zwei Routen für die Weiterleitung und den Callback hinzu.
use App\Http\Controllers\SocialiteController;

Route::get('auth/discord', [SocialiteController::class, 'login']);
Route::get('auth/discord/callback', [SocialiteController::class, 'callback']);
2

Controller erstellen

<?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');
    }
}

Scopes konfigurieren

In Discord OAuth2 legen Sie die abzurufenden Berechtigungen über Scopes fest. Der Standard-Scope ist nur identify.
public function login()
{
    return Socialite::driver('discord')
                    ->setScopes(['identify', 'email', 'guilds', 'guilds.join'])
                    ->redirect();
}
Wichtige Scopes im Überblick:
ScopeVerfügbare Informationen
identifyBenutzer-ID, Benutzername, Avatar (Standard)
emailE-Mail-Adresse
guildsListe der Server, in denen der Benutzer Mitglied ist
guilds.joinBerechtigung, den Benutzer einem Server hinzuzufügen
Alle Scopes finden Sie in der Discord-OAuth2-Dokumentation.

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.
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');
}
Um email abzurufen, ist der Scope email erforderlich. Wenn Sie den Scope nicht angeben, kann getEmail() null zurückgeben.

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.
Die aktuellsten Informationen finden Sie im GitHub-Repository.
Zuletzt geändert am 13. Juli 2026