메인 콘텐츠로 건너뛰기

개요

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에 리다이렉트용과 콜백용 두 라우트를 추가합니다.
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 저장소를 참조하세요.
마지막 수정일 2026년 7월 13일