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

> Paquete driver para implementar la autenticación OAuth2 de Discord con Laravel Socialite.

## Resumen

[revolution/socialite-discord](https://github.com/invokable/socialite-discord) es un paquete driver que permite usar la autenticación OAuth2 de Discord con Laravel Socialite.

Los proveedores integrados de Laravel Socialite no incluyen Discord. Instalando este paquete puedes añadir el inicio de sesión con Discord a tu aplicación usando `Socialite::driver('discord')`.

<Info>
  Para el uso de Laravel Socialite en sí, consulta la [guía de Socialite](/es/socialite).
</Info>

## Instalación

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

## Configuración

### Registra una aplicación en el Discord Developer Portal

Crea una aplicación en el [Discord Developer Portal](https://discord.com/developers/applications) y obtén el Client ID y el Client Secret en la sección **OAuth2**. Añade la URL de callback (por ejemplo, `https://example.com/auth/discord/callback`) en **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
```

## Uso básico

<Steps>
  <Step title="Define las rutas">
    Añade dos rutas a `routes/web.php`: una para la redirección y otra para el 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="Crea el controlador">
    ```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 de usuario de Discord
            // $discordUser->getName()      Nombre de usuario
            // $discordUser->getEmail()     Dirección de correo (requiere el scope email)
            // $discordUser->getAvatar()    URL del avatar
            // $discordUser->token          Token de acceso

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

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

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

## Configuración de scopes

En Discord OAuth2 los permisos que quieres obtener se indican como scopes. El scope por defecto es solo `identify`.

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

Lista de scopes principales:

| Scope         | Información que obtienes                               |
| ------------- | ------------------------------------------------------ |
| `identify`    | ID de usuario, nombre de usuario, avatar (por defecto) |
| `email`       | Dirección de correo                                    |
| `guilds`      | Lista de servidores a los que pertenece                |
| `guilds.join` | Permiso para añadir al usuario a un servidor           |

<Tip>
  Para ver todos los scopes, consulta la [documentación de OAuth2 de Discord](https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes).
</Tip>

## Guardar y autenticar al usuario

Ejemplo típico en la ruta de callback: obtén la información del usuario, guárdala en la base de datos e inicia sesión.

```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>
  Para obtener `email` necesitas el scope `email`. Si no lo especificas, `getEmail()` puede devolver `null`.
</Warning>

## Comparación con otros drivers de Socialite

Este paquete está implementado por la vía oficial `Socialite::extend()` y se usa exactamente con la misma API que los proveedores integrados. Para más detalles sobre el mecanismo de los proveedores personalizados y `Socialite::extend()`, consulta la [guía de Socialite](/es/socialite).

<Info>
  Para la información más reciente, consulta el [repositorio de GitHub](https://github.com/invokable/socialite-discord).
</Info>


## Related topics

- [Laravel Socialite (autenticación social)](/es/socialite.md)
- [Laravel Notification for Discord(Webhook)](/es/packages/laravel-notification-discord-webhook.md)
- [Socialite - Laravel Bluesky](/es/packages/laravel-bluesky/socialite.md)
- [Tutorial - Laravel Console Starter](/es/packages/laravel-console-starter/tutorial.md)
- [Socialite (LINE Login) - LINE SDK for Laravel](/es/packages/laravel-line-sdk/socialite.md)
