Laravel 8.x Laravel Socialite

イントロダクション

Laravelは、一般的なフォームベースの認証に加えて、Laravel Socialite(ソーシャライト:名士)を使用したOAuthプロバイダで認証するためのシンプルで便利な方法も提供します。Socialiteは現在、Facebook、Twitter、LinkedIn、Google、GitHub、GitLab、Bitbucketでの認証をサポートしています。

Tip!! 他のプラットフォームのアダプタは、コミュニティにより管理されているSocialiteプロバイダWebサイトで一覧できます。

インストール

Socialiteを使い始めるには、Composerパッケージマネージャーを使用して、プロジェクトの依存関係へパッケージを追加します。

composer require laravel/socialite

Socialiteのアップグレード

Socialiteの新しいメジャーバージョンにアップグレードするときは、アップグレードガイドを注意深く確認することが重要です。

設定

Socialiteを使用する前に、アプリケーションが使用するOAuthプロバイダの資格情報を追加する必要があります。これらの認証情報は、アプリケーションのconfig/services.php設定ファイルへ配置しておく必要があり、アプリケーションに必要なプロバイダに応じキーとしてfacebooktwitterlinkedingooglegithubgitlabbitbucketを使用する必要があります。

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

Tip!! redirectオプションが相対パスである場合、自動的に完全なURLへ解決されます。

認証

ルート

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メソッド使用時は、stateresponse_typeなどの予約キーワードを渡さないように注意してください。

ユーザー詳細情報の取得

ユーザーを認証コールバックルートへリダイレクトした後、Socialiteのuserメソッドを使用してユーザーの詳細を取得できます。userメソッドが返すユーザーオブジェクトは、ユーザーに関する情報を独自のデータベースに保存するために使用できるさまざまなプロパティとメソッドを提供します。認証するOAuthプロバイダがOAuth1.0またはOAuth2.0のどちらをサポートしているかに応じて、さまざまなプロパティとメソッドが使用できます。

use Laravel\Socialite\Facades\Socialite;

Route::get('/auth/callback', function () {
    $user = Socialite::driver('github')->user();

    // OAuth2.0プロバイダ
    $token = $user->token;
    $refreshToken = $user->refreshToken;
    $expiresIn = $user->expiresIn;

    // OAuth1.0プロバイダ
    $token = $user->token;
    $tokenSecret = $user->tokenSecret;

    // 両プロバイダ
    $user->getId();
    $user->getNickname();
    $user->getName();
    $user->getEmail();
    $user->getAvatar();
});

トークンからのユーザー詳細情報の取得(OAuth2)

ユーザーの有効なアクセストークンを既に持っている場合は、SocialiteのuserFromTokenメソッドを使用してユーザーの詳細を取得できます。

use Laravel\Socialite\Facades\Socialite;

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

トークンとSecretからのユーザー詳細情報の取得(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: ステートレス認証は、認証にOAuth1.0を使用するTwitterドライバでは使用できません。

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる