メインコンテンツへスキップ

概要

revolution/socialite-discord は、Discord OAuth2 認証を Laravel Socialite で利用できるようにするドライバーパッケージです。 Laravel Socialite の組み込みプロバイダーには Discord が含まれていません。このパッケージをインストールするだけで、Socialite::driver('discord') を使った Discord ログインをアプリに追加できます。
Laravel Socialite 自体の使い方については Socialite ガイド を参照してください。

インストール

composer require revolution/socialite-discord

設定

Discord Developer Portal でアプリを登録する

Discord Developer Portal でアプリケーションを作成し、OAuth2 セクションから Client ID と Client Secret を取得します。Redirects にコールバック URL(例: 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

基本的な使い方

1

ルートを定義する

routes/web.php にリダイレクト用とコールバック用の2つのルートを追加します。
use App\Http\Controllers\SocialiteController;

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

コントローラーを作成する

<?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()        Discord ユーザー ID
        // $discordUser->getName()      ユーザー名
        // $discordUser->getEmail()     メールアドレス(email スコープが必要)
        // $discordUser->getAvatar()    アバター URL
        // $discordUser->token          アクセストークン

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

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

        return redirect('/dashboard');
    }
}

スコープの設定

Discord OAuth2 では取得する権限をスコープで指定します。デフォルトのスコープは identify のみです。
public function login()
{
    return Socialite::driver('discord')
                    ->setScopes(['identify', 'email', 'guilds', 'guilds.join'])
                    ->redirect();
}
主なスコープの一覧:
スコープ取得できる情報
identifyユーザー ID、ユーザー名、アバター(デフォルト)
emailメールアドレス
guilds参加しているサーバー一覧
guilds.joinユーザーをサーバーに追加する権限
すべてのスコープは Discord OAuth2 ドキュメント を参照してください。

ユーザーの保存とログイン

コールバックルートでユーザー情報を取得し、データベースに保存してからログインする典型的な実装例です。
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');
}
email を取得するには email スコープが必要です。スコープを指定しない場合、getEmail()null を返すことがあります。

他の Socialite ドライバーとの比較

このパッケージは Socialite::extend() を使った正規の方法で実装されており、組み込みプロバイダーとまったく同じ API で使えます。カスタムプロバイダーの仕組みや Socialite::extend() の詳細については Socialite ガイド を参照してください。
最新情報は GitHub リポジトリ を参照してください。
Last modified on April 30, 2026