> ## 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 for Discord

> Package pilote pour implémenter l'authentification OAuth2 Discord avec Laravel Socialite.

## Vue d'ensemble

[revolution/socialite-discord](https://github.com/invokable/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')`.

<Info>
  Pour l'utilisation de Laravel Socialite lui-même, consultez le [guide Socialite](/fr/socialite).
</Info>

## Installation

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

## Configuration

### Enregistrer une application sur le Discord Developer Portal

Créez une application sur le [Discord Developer Portal](https://discord.com/developers/applications) 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

```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
```

## Utilisation de base

<Steps>
  <Step title="Définir les routes">
    Ajoutez deux routes dans `routes/web.php` : une pour la redirection et une pour le callback.

    ```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="Créer le contrôleur">
    ```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()        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');
        }
    }
    ```
  </Step>
</Steps>

## Configuration des scopes

En OAuth2 Discord, les permissions à obtenir sont spécifiées via les scopes. Le scope par défaut est uniquement `identify`.

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

Principaux scopes :

| Scope         | Informations obtenues                                |
| ------------- | ---------------------------------------------------- |
| `identify`    | ID utilisateur, nom, avatar (par défaut)             |
| `email`       | Adresse e-mail                                       |
| `guilds`      | Liste des serveurs auxquels l'utilisateur appartient |
| `guilds.join` | Permission d'ajouter l'utilisateur à un serveur      |

<Tip>
  Pour l'ensemble des scopes, consultez la [documentation OAuth2 de Discord](https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes).
</Tip>

## 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.

```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>
  Pour obtenir `email`, le scope `email` est nécessaire. Sans ce scope, `getEmail()` peut retourner `null`.
</Warning>

## 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](/fr/socialite).

<Info>
  Pour les dernières informations, consultez le [dépôt GitHub](https://github.com/invokable/socialite-discord).
</Info>


## Related topics

- [Laravel Socialite (authentification sociale)](/fr/socialite.md)
- [Laravel Notification for Discord (Webhook)](/fr/packages/laravel-notification-discord-webhook.md)
- [Socialite - Laravel Bluesky](/fr/packages/laravel-bluesky/socialite.md)
- [Tutoriel - Laravel Console Starter](/fr/packages/laravel-console-starter/tutorial.md)
- [Socialite (LINE Login) - LINE SDK for Laravel](/fr/packages/laravel-line-sdk/socialite.md)
