Laravel Socialite (Laravel Socialite)
導入 (Introduction)
一般的なフォームベースの認証に加えて、Laravel は、Laravel Socialite を使用して OAuth プロバイダで認証する簡単で便利な方法も提供します。 Socialite は現在、Facebook、Twitter、LinkedIn、Google、GitHub、GitLab、Bitbucket による認証をサポートしています。
{tip} 他のプラットフォーム用のアダプターは、コミュニティ主導の Socialite Providers ウェブサイトにリストされています。
インストール (Installation)
Socialite の使用を開始するには、Composer パッケージ マネージャーを使用して、プロジェクトの依存関係にパッケージを追加します。
composer require laravel/socialite
Socialite のアップグレード (Upgrading Socialite)
Socialite の新しいメジャー バージョンにアップグレードする場合は、アップグレードガイド を注意深く確認することが重要です。
構成 (Configuration)
Socialite を使用する前に、アプリケーションが使用する OAuth プロバイダの資格情報を追加する必要があります。これらの資格情報はアプリケーションの config/services.php 構成ファイルに配置する必要があり、アプリケーションのプロバイダに応じて、キー facebook、twitter、linkedin、google、github、gitlab、または bitbucket を使用する必要があります。必要なもの:
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => 'http://example.com/callback-url',
],
{tip}
redirectオプションに相対パスが含まれている場合、完全修飾 URL に自動的に解決されます。
認証 (Authentication)
ルーティング
OAuth プロバイダを使用してユーザーを認証するには、2 つのルートが必要です。1 つはユーザーを OAuth プロバイダにリダイレクトするルート、もう 1 つは認証後にプロバイダからコールバックを受信するルートです。以下のコントローラの例は、両方のルートの実装を示しています。
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::where('github_id', $githubUser->id)->first();
if ($user) {
$user->update([
'github_token' => $githubUser->token,
'github_refresh_token' => $githubUser->refreshToken,
]);
} else {
$user = User::create([
'name' => $githubUser->name,
'email' => $githubUser->email,
'github_id' => $githubUser->id,
'github_token' => $githubUser->token,
'github_refresh_token' => $githubUser->refreshToken,
]);
}
Auth::login($user);
return redirect('/dashboard');
});
{tip} 特定の 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();
オプションのパラメータ
多くの OAuth プロバイダは、リダイレクト要求のオプションのパラメーターをサポートしています。リクエストにオプションのパラメーターを含めるには、連想配列を使用して with メソッドを呼び出します。
use Laravel\Socialite\Facades\Socialite;
return Socialite::driver('google')
->with(['hd' => 'example.com'])
->redirect();
{note}
withメソッドを使用する場合は、stateやresponse_typeなどの予約キーワードを渡さないように注意してください。
ユーザー詳細の取得 (Retrieving User Details)
ユーザーが認証コールバック ルートにリダイレクトされた後、Socialite の user メソッドを使用してユーザーの詳細を取得できます。 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 providers...
$token = $user->token;
$refreshToken = $user->refreshToken;
$expiresIn = $user->expiresIn;
// OAuth 1.0 providers...
$token = $user->token;
$tokenSecret = $user->tokenSecret;
// All providers...
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();
});
トークンからのユーザー詳細の取得 (OAuth2)
ユーザーの有効なアクセス トークンをすでに持っている場合は、Socialite の userFromToken メソッドを使用して詳細を取得できます。
use Laravel\Socialite\Facades\Socialite;
$user = Socialite::driver('github')->userFromToken($token);
トークンとシークレットからユーザーの詳細を取得する (OAuth1)
ユーザーの有効なトークンとシークレットをすでに持っている場合は、Socialite の userFromTokenAndSecret メソッドを使用して詳細を取得できます。
use Laravel\Socialite\Facades\Socialite;
$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);
ステートレス認証
stateless メソッドを使用して、セッション状態の検証を無効にすることができます。これは、ソーシャル認証を API に追加するときに便利です。
use Laravel\Socialite\Facades\Socialite;
return Socialite::driver('google')->stateless()->user();
{note} ステートレス認証は、認証に OAuth 1.0 を使用する Twitter ドライバでは使用できません。