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를 사용해 프로젝트에 Socialite 패키지를 추가합니다.
composer require laravel/socialiteSocialite 업그레이드
Socialite의 새로운 메이저 버전으로 업그레이드할 때는 공식 업그레이드 가이드를 반드시 꼼꼼히 검토하세요.
설정
Socialite를 사용하기 전에 연동할 OAuth 제공자의 인증 정보(클라이언트 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 값에 상대 경로를 입력하면 Laravel이 자동으로 전체 URL로 변환해 줍니다.
인증
라우팅
OAuth 인증 흐름은 크게 두 단계로 나뉩니다. 사용자를 OAuth 제공자로 리디렉션하는 라우트와, 인증 완료 후 제공자가 다시 애플리케이션으로 보내는 콜백을 처리하는 라우트가 필요합니다.
아래는 두 라우트의 기본 구현 예시입니다.
use Laravel\Socialite\Facades\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\Facades\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\Facades\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는 두 가지 액세스 토큰 유형을 제공하며, 각각 별도의 권한 스코프를 가집니다.
- 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();Slack이 사용자를 콜백 URL로 다시 보낸 뒤 user 메서드를 호출할 때도 asBotUser를 먼저 호출해야 합니다.
$user = Socialite::driver('slack')->asBotUser()->user();Bot 토큰 방식에서도 user 메서드는 Laravel\Socialite\Two\User 인스턴스를 반환하지만, token 속성만 채워집니다. 이 토큰을 저장해 두면 인증된 사용자의 Slack 워크스페이스로 알림을 전송할 수 있습니다.
선택적 파라미터
일부 OAuth 제공자는 리디렉션 요청 시 추가 파라미터를 지원합니다. with 메서드에 연관 배열을 전달해 이를 포함할 수 있습니다.
use Laravel\Socialite\Facades\Socialite;
return Socialite::driver('google')
->with(['hd' => 'example.com'])
->redirect();WARNING
with 메서드를 사용할 때 state나 response_type 같은 예약어는 전달하지 않도록 주의하세요.
사용자 정보 조회
콜백 라우트에서 Socialite의 user 메서드를 호출하면 OAuth 제공자로부터 사용자 정보를 담은 객체를 받을 수 있습니다. 이 객체의 속성과 메서드를 통해 필요한 정보를 가져와 데이터베이스에 저장할 수 있습니다.
사용 가능한 속성과 메서드는 제공자가 OAuth 1.0을 사용하는지 OAuth 2.0을 사용하는지에 따라 다릅니다.
use Laravel\Socialite\Facades\Socialite;
Route::get('/auth/callback', function () {
$user = Socialite::driver('github')->user();
// OAuth 2.0 제공자 전용
$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\Facades\Socialite;
$user = Socialite::driver('github')->userFromToken($token);iOS 앱에서 Facebook Limited Login을 사용하는 경우, Facebook은 액세스 토큰 대신 OIDC 토큰을 반환합니다. 이 경우에도 동일하게 userFromToken 메서드에 OIDC 토큰을 전달하면 사용자 정보를 조회할 수 있습니다.
스테이트리스(Stateless) 인증
stateless 메서드를 사용하면 세션 상태 검증을 비활성화할 수 있습니다. 쿠키 기반 세션을 사용하지 않는 스테이트리스 API에 소셜 로그인을 연동할 때 유용합니다.
use Laravel\Socialite\Facades\Socialite;
return Socialite::driver('google')->stateless()->user();