Saltar al contenido principal

Resumen

revolution/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').
Para el uso de Laravel Socialite en sí, consulta la guía de Socialite.

Instalación

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

'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

Uso básico

1

Define las rutas

Añade dos rutas a routes/web.php: una para la redirección y otra para el callback.
use App\Http\Controllers\SocialiteController;

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

Crea el controlador

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

Configuración de scopes

En Discord OAuth2 los permisos que quieres obtener se indican como scopes. El scope por defecto es solo identify.
public function login()
{
    return Socialite::driver('discord')
                    ->setScopes(['identify', 'email', 'guilds', 'guilds.join'])
                    ->redirect();
}
Lista de scopes principales:
ScopeInformación que obtienes
identifyID de usuario, nombre de usuario, avatar (por defecto)
emailDirección de correo
guildsLista de servidores a los que pertenece
guilds.joinPermiso para añadir al usuario a un servidor
Para ver todos los scopes, consulta la documentación de OAuth2 de Discord.

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

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.
Para la información más reciente, consulta el repositorio de GitHub.
Última modificación el 13 de julio de 2026