Laravel 5.7 Laravel Socialite

イントロダクション

典型的なフォームベースの認証に付け加え、LaravelはLaravel Socialite(=名士)による、OAuthプロバイダによるシンプルで便利な認証方法も提供しています。Socialiteは現在、Facebook、Twitter、LinkedIn、Google、GitHub、GitLab、Bitbucketによる認証をサポートしています。

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

インストール

Socialiteを使用開始するには、Composerを使い、プロジェクトの依存パッケージに追加してください。

composer require laravel/socialite

設定

Socialiteを使用する前に、アプリケーションで使用するOAuthサービスの認証情報も追加する必要があります。認証情報はconfig/services.php設定ファイルで指定し、アプリケーションの必要に合わせ、facebooktwitterlinkedingooglegithubgitlabbitbucketキーを使用してください。一例をご覧ください。

'github' => [
    'client_id' => env('GITHUB_CLIENT_ID'),         // GitHubのClient ID
    'client_secret' => env('GITHUB_CLIENT_SECRET'), // GitHubのClient Secret
    'redirect' => 'http://your-callback-url',
],

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

ルート

これで、ユーザーを認証する準備ができました。2つのルートが必要になります。ひとつはOAuthプロバイダへユーザーをリダイレクトするルート、もう一つは認証後にプロバイダーからのコールバックを受けるルートです。Socialiteファサードを使用し、Socialiteにアクセスしましょう。

<?php

namespace App\Http\Controllers\Auth;

use Socialite;

class LoginController extends Controller
{
    /**
     * GitHubの認証ページヘユーザーをリダイレクト
     *
     * @return \Illuminate\Http\Response
     */
    public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }

    /**
     * GitHubからユーザー情報を取得
     *
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('github')->user();

        // $user->token;
    }
}

redirectメソッドはユーザーをOAuthプロバイダへ送るのを担当します。一方のuserメソッドは送られて来たリクエストを読み、プロバイダからユーザーの情報を取得します。

もちろん、コントローラメソッドへのルートを定義する必要があります。

Route::get('login/github', 'Auth\LoginController@redirectToProvider');
Route::get('login/github/callback', 'Auth\LoginController@handleProviderCallback');

オプションのパラメータ

多くのOAuthプロバイダがリダイレクトリクエスト中のオプションパラメータをサポートしています。リクエストにオプションパラメータを含めるには、withメソッドを呼び出し、連想配列を渡します。

return Socialite::driver('google')
    ->with(['hd' => 'example.com'])
    ->redirect();

Note: withメソッドを使用時は、stateresponse_typeなどの予約キーワードを渡さないように注意してください。

アクセススコープ

ユーザーをリダイレクトする前に、scopesメソッドを使用し、リクエストへ「スコープ」を追加することもできます。このメソッドは、存在する全スコープを皆さんが指定したものへマージします。

return Socialite::driver('github')
    ->scopes(['read:user', 'public_repo'])
    ->redirect();

setScopesメソッドを使用し、存在するスコープを全てオーバーライトできます。

return Socialite::driver('github')
    ->setScopes(['read:user', 'public_repo'])
    ->redirect();

ステートレスな認証

statelessメソッドはセッション状態の確認を無効にするために使用します。これはAPIへソーシャル認証を追加する場合に便利です。

return Socialite::driver('google')->stateless()->user();

ユーザー詳細情報の取得

ユーザーインスタンスを取得したら、詳細情報をもっと取得できます。

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

// OAuth Twoプロバイダ
$token = $user->token;
$refreshToken = $user->refreshToken; // not always provided
$expiresIn = $user->expiresIn;

// OAuth Oneプロバイダ
$token = $user->token;
$tokenSecret = $user->tokenSecret;

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

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

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

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

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

すでにユーザーに対する有効なトークン/secretペアを取得している場合は、userFromTokenAndSecretメソッドを用い、詳細を取得できます。

$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュを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)へ移動

その他

?

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