본문 바로가기

Laravel Socialite

번역일: 2026년 6월 20일

Laravel Socialite

소개

Laravel은 폼 기반의 전통적인 인증 외에도, Laravel Socialite를 통해 OAuth 제공자를 이용한 소셜 로그인을 간편하게 구현할 수 있습니다. Socialite는 현재 Facebook, X(구 Twitter), LinkedIn, Google, GitHub, GitLab, Bitbucket, Slack 인증을 지원합니다.

NOTE

위 목록 외의 플랫폼은 커뮤니티에서 관리하는 Socialite Providers 사이트에서 어댑터를 찾을 수 있습니다. 카카오, 네이버 등 국내 서비스용 어댑터도 이 사이트에서 제공됩니다.

설치

Composer로 패키지를 추가합니다:

composer require laravel/socialite

Socialite 업그레이드

Socialite의 새로운 메이저 버전으로 업그레이드할 때는 반드시 업그레이드 가이드를 먼저 확인하세요.

설정

Socialite를 사용하려면 먼저 각 OAuth 제공자의 인증 정보를 설정해야 합니다. 이 정보는 일반적으로 각 서비스의 개발자 콘솔(예: GitHub의 OAuth Apps 설정, Google Cloud Console 등)에서 애플리케이션을 등록하면 발급됩니다.

발급받은 클라이언트 ID와 시크릿은 config/services.php 파일에 아래와 같이 추가합니다. 키 이름은 사용하는 제공자에 따라 facebook, x, linkedin-openid, google, github, gitlab, bitbucket, slack, slack-openid 중 하나를 사용합니다:

'github' => [ 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), 'redirect' => 'http://example.com/callback-url', ],

NOTE

redirect 값에 상대 경로를 입력하면 자동으로 절대 URL로 변환됩니다.

인증

라우팅

OAuth 인증에는 두 개의 라우트가 필요합니다. 하나는 사용자를 OAuth 제공자로 리디렉션하는 라우트이고, 다른 하나는 인증 완료 후 제공자로부터 콜백을 받는 라우트입니다.

use Laravel\Socialite\Socialite; Route::get('/auth/redirect', function () { return Socialite::driver('github')->redirect(); }); Route::get('/auth/callback', function () { $user = Socialite::driver('github')->user(); // $user->token });

Socialite 파사드의 redirect 메서드는 사용자를 OAuth 제공자로 리디렉션하고, user 메서드는 콜백으로 돌아온 요청을 처리하여 제공자로부터 사용자 정보를 가져옵니다.

인증 및 저장

OAuth 제공자로부터 사용자 정보를 받은 후에는 해당 사용자가 데이터베이스에 이미 존재하는지 확인하고, 필요에 따라 새로 생성한 뒤 로그인 처리를 합니다:

use App\Models\User; use Illuminate\Support\Facades\Auth; use Laravel\Socialite\Socialite; Route::get('/auth/callback', function () { $githubUser = Socialite::driver('github')->user(); $user = User::updateOrCreate([ 'github_id' => $githubUser->id, ], [ 'name' => $githubUser->name, 'email' => $githubUser->email, 'github_token' => $githubUser->token, 'github_refresh_token' => $githubUser->refreshToken, ]); Auth::login($user); return redirect('/dashboard'); });

NOTE

각 OAuth 제공자에서 어떤 사용자 정보를 제공하는지는 사용자 정보 조회 섹션을 참고하세요.

액세스 스코프

사용자를 리디렉션하기 전에 scopes 메서드로 요청할 권한 범위(스코프)를 지정할 수 있습니다. 이 메서드는 기존에 지정된 스코프에 새 스코프를 추가(병합)합니다:

use Laravel\Socialite\Socialite; return Socialite::driver('github') ->scopes(['read:user', 'public_repo']) ->redirect();

기존 스코프를 모두 덮어쓰려면 setScopes 메서드를 사용하세요:

return Socialite::driver('github') ->setScopes(['read:user', 'public_repo']) ->redirect();

Slack 봇 스코프

Slack API는 토큰 유형에 따라 각기 다른 권한 스코프를 사용합니다. Socialite는 다음 두 가지 Slack 토큰 유형을 모두 지원합니다:

  • Bot 토큰 (xoxb- 접두사)
  • User 토큰 (xoxp- 접두사)

기본적으로 slack 드라이버는 User 토큰을 생성하며, user 메서드 호출 시 사용자 정보를 반환합니다.

Bot 토큰은 애플리케이션이 사용자의 Slack 워크스페이스로 알림을 보내야 할 때 유용합니다. Bot 토큰을 생성하려면 리디렉션 전에 asBotUser 메서드를 호출하세요:

return Socialite::driver('slack') ->asBotUser() ->setScopes(['chat:write', 'chat:write.public', 'chat:write.customize']) ->redirect();

콜백에서 사용자 정보를 조회할 때도 asBotUser를 먼저 호출해야 합니다:

$user = Socialite::driver('slack')->asBotUser()->user();

Bot 토큰 모드에서 user 메서드는 Laravel\Socialite\Two\User 인스턴스를 반환하지만, token 속성만 채워집니다. 이 토큰을 저장해두면 인증된 사용자의 Slack 워크스페이스로 알림을 전송하는 데 사용할 수 있습니다.

선택적 파라미터

일부 OAuth 제공자는 리디렉션 요청에 추가적인 선택 파라미터를 지원합니다. with 메서드에 연관 배열을 전달하면 해당 파라미터를 요청에 포함할 수 있습니다:

use Laravel\Socialite\Socialite; return Socialite::driver('google') ->with(['hd' => 'example.com']) ->redirect();

WARNING

with 메서드 사용 시 state, response_type 등 OAuth 프로토콜에서 예약된 키워드는 전달하지 않도록 주의하세요.

사용자 정보 조회

사용자가 OAuth 인증을 완료하고 콜백 라우트로 돌아오면, Socialite의 user 메서드로 사용자 정보를 가져올 수 있습니다. 반환된 사용자 객체는 다양한 속성과 메서드를 제공하므로, 필요한 정보를 데이터베이스에 저장하는 데 활용할 수 있습니다.

OAuth 1.0과 OAuth 2.0 제공자에 따라 사용 가능한 속성과 메서드가 다릅니다:

use Laravel\Socialite\Socialite; Route::get('/auth/callback', function () { $user = Socialite::driver('github')->user(); // OAuth 2.0 제공자 (GitHub, Google 등)... $token = $user->token; $refreshToken = $user->refreshToken; $expiresIn = $user->expiresIn; // OAuth 1.0 제공자... $token = $user->token; $tokenSecret = $user->tokenSecret; // 모든 제공자 공통... $user->getId(); $user->getNickname(); $user->getName(); $user->getEmail(); $user->getAvatar(); });

토큰으로 사용자 정보 조회

유효한 액세스 토큰이 이미 있다면, userFromToken 메서드를 사용해 해당 토큰으로 사용자 정보를 직접 조회할 수 있습니다:

use Laravel\Socialite\Socialite; $user = Socialite::driver('github')->userFromToken($token);

iOS 앱에서 Facebook Limited Login을 사용하는 경우, Facebook은 액세스 토큰 대신 OIDC 토큰을 반환합니다. 이 OIDC 토큰도 userFromToken 메서드에 동일하게 전달하여 사용자 정보를 조회할 수 있습니다.

상태 비저장(Stateless) 인증

stateless 메서드를 사용하면 세션 상태 검증을 비활성화할 수 있습니다. 쿠키 기반 세션을 사용하지 않는 Stateless API에 소셜 인증을 추가할 때 유용합니다:

use Laravel\Socialite\Socialite; return Socialite::driver('google')->stateless()->user();

테스트

Laravel Socialite는 실제 OAuth 제공자에 요청을 보내지 않고도 인증 흐름을 테스트할 수 있는 편리한 방법을 제공합니다. fake 메서드를 사용하면 OAuth 제공자의 동작을 모킹(mock)하고 반환될 사용자 데이터를 직접 정의할 수 있습니다.

리디렉션 페이킹

애플리케이션이 사용자를 OAuth 제공자로 올바르게 리디렉션하는지 테스트하려면, 리디렉션 라우트에 요청하기 전에 fake 메서드를 호출하세요. 그러면 Socialite는 실제 OAuth 제공자 URL 대신 가짜 인증 URL로 리디렉션합니다:

use Laravel\Socialite\Socialite; test('사용자가 GitHub으로 리디렉션된다', function () { Socialite::fake('github'); $response = $this->get('/auth/github/redirect'); $response->assertRedirect(); });

콜백 페이킹

콜백 라우트를 테스트하려면 fake 메서드와 함께 User 인스턴스를 제공하면 됩니다. User 인스턴스는 map 메서드로 생성할 수 있습니다:

use Laravel\Socialite\Socialite; use Laravel\Socialite\Two\User; test('사용자가 GitHub으로 로그인할 수 있다', function () { Socialite::fake('github', (new User)->map([ 'id' => 'github-123', 'name' => '홍길동', 'email' => 'hong@example.com', ])); $response = $this->get('/auth/github/callback'); $response->assertRedirect('/dashboard'); $this->assertDatabaseHas('users', [ 'name' => '홍길동', 'email' => 'hong@example.com', 'github_id' => 'github-123', ]); });

기본적으로 User 인스턴스에는 token 속성이 포함됩니다. 필요하다면 아래와 같이 추가 속성을 직접 지정할 수도 있습니다:

$fakeUser = (new User)->map([ 'id' => 'github-123', 'name' => '홍길동', 'email' => 'hong@example.com', ])->setToken('fake-token') ->setRefreshToken('fake-refresh-token') ->setExpiresIn(3600) ->setApprovedScopes(['read', 'write'])

이 문서는 Laravel 공식 문서(MIT)를 한국 개발자를 위해 번역·재구성한 것입니다.

번역일: 2026년 6월 20일