Laravel5.5 LTS 日本語ドキュメント

このリポジトリはPHP Webアプリフレームワークである、LaravelのLTSバージョンである5.5の公式英文ドキュメントを日本語へ翻訳しています。

This project is maintained by okinaka

Laravel Socialite

イントロダクション

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

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

インストール

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

composer require laravel/socialite

設定

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

'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} If the redirect option contains a relative path, it will automatically be resolved to a fully qualified 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();

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

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

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