Vai al contenuto principale

Panoramica

revolution/socialite-discord è un pacchetto driver che permette di usare l’autenticazione OAuth2 di Discord con Laravel Socialite. I provider integrati di Laravel Socialite non includono Discord. Basta installare questo pacchetto per aggiungere il login Discord all’app usando Socialite::driver('discord').
Per l’uso di Laravel Socialite in sé consulta la guida Socialite.

Installazione

composer require revolution/socialite-discord

Configurazione

Registrare un’app nel Discord Developer Portal

Nel Discord Developer Portal, crea un’applicazione e ottieni Client ID e Client Secret dalla sezione OAuth2. Aggiungi in Redirects l’URL di callback (ad esempio 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

Uso di base

1

Definire le route

Aggiungi in routes/web.php due route: una per il reindirizzamento e una per la callback.
use App\Http\Controllers\SocialiteController;

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

Creare il controller

<?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 utente Discord
        // $discordUser->getName()      Nome utente
        // $discordUser->getEmail()     Indirizzo email (richiede lo scope email)
        // $discordUser->getAvatar()    URL avatar
        // $discordUser->token          Token di accesso

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

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

        return redirect('/dashboard');
    }
}

Impostare gli scope

In Discord OAuth2 i permessi da ottenere si specificano tramite scope. Lo scope predefinito è solo identify.
public function login()
{
    return Socialite::driver('discord')
                    ->setScopes(['identify', 'email', 'guilds', 'guilds.join'])
                    ->redirect();
}
Elenco degli scope principali:
ScopeInformazioni ottenibili
identifyID utente, nome utente, avatar (predefinito)
emailIndirizzo email
guildsElenco dei server a cui l’utente partecipa
guilds.joinPermesso di aggiungere l’utente a un server
Per l’elenco completo degli scope, consulta la documentazione Discord OAuth2.

Salvataggio utente e login

Esempio tipico che, nella route di callback, ottiene le informazioni utente, le salva nel database e poi effettua il login.
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');
}
Per ottenere l’email serve lo scope email. Se non specifichi lo scope, getEmail() potrebbe restituire null.

Confronto con altri driver Socialite

Questo pacchetto è implementato nel modo canonico tramite Socialite::extend() e si usa con la stessa identica API dei provider integrati. Per il meccanismo dei provider personalizzati e i dettagli di Socialite::extend(), consulta la guida Socialite.
Per informazioni aggiornate consulta il repository GitHub.
Ultima modifica il 13 luglio 2026