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/socialiteSocialite 업그레이드
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'])