Passer au contenu principal

Vue d’ensemble

revolution/socialite-discord est un package pilote qui permet d’utiliser l’authentification OAuth2 Discord avec Laravel Socialite. Discord ne fait pas partie des fournisseurs intégrés à Laravel Socialite. Il suffit d’installer ce package pour ajouter à votre application une connexion Discord via Socialite::driver('discord').
Pour l’utilisation de Laravel Socialite lui-même, consultez le guide Socialite.

Installation

composer require revolution/socialite-discord

Configuration

Enregistrer une application sur le Discord Developer Portal

Créez une application sur le Discord Developer Portal et récupérez le Client ID et le Client Secret depuis la section OAuth2. Ajoutez l’URL de callback (par exemple https://example.com/auth/discord/callback) dans Redirects.

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

Utilisation de base

1

Définir les routes

Ajoutez deux routes dans routes/web.php : une pour la redirection et une pour le callback.
use App\Http\Controllers\SocialiteController;

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

Créer le contrôleur

<?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()        ID utilisateur Discord
        // $discordUser->getName()      Nom d'utilisateur
        // $discordUser->getEmail()     Adresse e-mail (le scope email est requis)
        // $discordUser->getAvatar()    URL de l'avatar
        // $discordUser->token          Jeton d'accès

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

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

        return redirect('/dashboard');
    }
}

Configuration des scopes

En OAuth2 Discord, les permissions à obtenir sont spécifiées via les scopes. Le scope par défaut est uniquement identify.
public function login()
{
    return Socialite::driver('discord')
                    ->setScopes(['identify', 'email', 'guilds', 'guilds.join'])
                    ->redirect();
}
Principaux scopes :
ScopeInformations obtenues
identifyID utilisateur, nom, avatar (par défaut)
emailAdresse e-mail
guildsListe des serveurs auxquels l’utilisateur appartient
guilds.joinPermission d’ajouter l’utilisateur à un serveur
Pour l’ensemble des scopes, consultez la documentation OAuth2 de Discord.

Sauvegarder l’utilisateur et le connecter

Exemple d’implémentation typique : récupérer les informations utilisateur dans la route de callback, les enregistrer en base puis connecter l’utilisateur.
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');
}
Pour obtenir email, le scope email est nécessaire. Sans ce scope, getEmail() peut retourner null.

Comparaison avec d’autres pilotes Socialite

Ce package est implémenté selon la méthode officielle via Socialite::extend() et s’utilise avec exactement la même API que les fournisseurs intégrés. Pour le fonctionnement des fournisseurs personnalisés et les détails de Socialite::extend(), consultez le guide Socialite.
Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026