Manager
인증된 제출자socialiteproviders/manager
Laravel Socialite에서 새로운 프로바이더를 추가하거나 기본 제공 프로바이더를 손쉽게 재정의하세요.
Socialite Providers Manager
개요
Laravel Socialite를 확장하여 새로운 소셜 로그인 프로바이더를 쉽게 추가하거나, 기존 프로바이더를 재정의할 수 있게 해주는 패키지입니다.
주요 특징
- 등록한 모든 프로바이더에 일관된 방식으로 접근할 수 있습니다.
- Socialite가 실제로 호출될 때까지 프로바이더 인스턴스 생성을 지연(lazy instantiation)합니다.
- 기존 내장 프로바이더를 재정의할 수 있습니다.
- 커스텀 프로바이더를 직접 만들 수 있습니다.
stateless()옵션을true또는false로 설정할 수 있습니다.- 설정값을 런타임에 동적으로 변경할 수 있습니다.
config/services.php배열을 따로 수정하지 않아도.env파일에서 환경변수를 직접 읽어옵니다.
사용 가능한 프로바이더
- SocialiteProviders 공식 목록에서 카카오, 네이버, 라인 등 다양한 프로바이더를 확인할 수 있습니다.
- 기존 프로바이더를 참고하여 직접 만들거나 수정할 수도 있습니다.
참고 문서
핸들러 만들기
아래는 핸들러 클래스의 예시입니다. 이 클래스의 전체 이름(FQCN)을 EventServiceProvider의 $listen 배열에 등록해야 합니다.
- Laravel 이벤트 문서도 함께 참고하세요.
providername자리에는 실제 프로바이더 이름(예:kakao,naver,meetup)을 입력합니다.- 네임스페이스와 클래스 이름은 프로젝트에 맞게 변경하세요.
namespace Your\Name\Space;
use SocialiteProviders\Manager\SocialiteWasCalled;
class ProviderNameExtendSocialite
{
public function handle(SocialiteWasCalled $socialiteWasCalled)
{
$socialiteWasCalled->extendSocialite('providername', \Your\Name\Space\Provider::class);
}
}프로바이더 만들기
이미 만들어진 프로바이더 목록을 참고하여 구현 방식을 익히는 것을 권장합니다.
내장 프로바이더 재정의하기
laravel/socialite에 내장된 프로바이더(예: facebook)를 재정의하려면, 동일한 이름으로 새 프로바이더를 만들기만 하면 됩니다. 이름이 같으면 내장 프로바이더 대신 커스텀 프로바이더가 사용됩니다.
설정값 동적으로 전달하기
런타임에 클라이언트 ID, 시크릿, 리다이렉트 URL 등을 직접 지정해야 하는 경우 Config 객체를 생성하여 전달할 수 있습니다.
$clientId = "secret";
$clientSecret = "secret";
$redirectUrl = "http://yourdomain.com/api/redirect";
$additionalProviderConfig = ['site' => 'meta.stackoverflow.com'];
$config = new \SocialiteProviders\Manager\Config($clientId, $clientSecret, $redirectUrl, $additionalProviderConfig);
return Socialite::with('provider-name')->setConfig($config)->redirect();NOTE
setConfig()는 반드시 redirect()나 user() 등 Socialite 메서드를 호출하기 전에 실행해야 합니다.
OAuth1 서버 클래스 만들기
기존에 구현된 OAuth1 프로바이더 목록을 참고하여 구현 방식을 익히세요.
액세스 토큰 전체 응답 가져오기
Laravel Socialite는 기본적으로 access_token만 접근할 수 있도록 허용하며, 이는 \Laravel\Socialite\User->token 공개 프로퍼티로 접근합니다.
그러나 refresh_token 등 응답 본문 전체가 필요한 경우도 있습니다. 이를 지원하려면 다음과 같이 추상 클래스를 상속해야 합니다.
- OAuth2 프로바이더:
\SocialiteProviders\Manager\OAuth2\AbstractProvider를 상속 - OAuth1 프로바이더:
\SocialiteProviders\Manager\OAuth1\AbstractProvider와\SocialiteProviders\Manager\OAuth1\Server를 활용
설정 후 아래와 같이 전체 응답 본문에 접근할 수 있습니다.
$user->accessTokenResponseBody