イントロダクションIntroduction
典型的なフォームベースの認証に付け加え、LaravelはLaravel Socialite(=名士)による、OAuthプロバイダによるシンプルで便利な認証方法も提供しています。Socialiteは現在、Facebook、Twitter、LinkedIn、Google、GitHub、GitLab、Bitbucketによる認証をサポートしています。In addition to typical, form based authentication, Laravel also provides a simple, convenient way to authenticate with OAuth providers using Laravel Socialite[https://github.com/laravel/socialite]. Socialite currently supports authentication with Facebook, Twitter, LinkedIn, Google, GitHub, GitLab and Bitbucket.
SocialiteプロバイダWebサイトで一覧できます。{tip} Adapters for other platforms are listed at the community driven Socialite Providers[https://socialiteproviders.com/] website.
">Tip!! 他のプラットフォームのアダプタは、コミュニティにより管理されている
SocialiteのアップデートUpgrading Socialite
Socialiteのメジャーバージョンへアップデートするときは、アップグレードガイドを十分にレビューしてください。When upgrading to a new major version of Socialite, it's important that you carefully review the upgrade guide[https://github.com/laravel/socialite/blob/master/UPGRADE.md].
インストールInstallation
Socialiteを使用開始するには、Composerを使い、プロジェクトの依存パッケージに追加してください。To get started with Socialite, use Composer to add the package to your project's dependencies:
composer require laravel/socialite
設定Configuration
Socialiteを使用する前に、アプリケーションで使用するOAuthサービスの認証情報も追加する必要があります。認証情報はconfig/services.php
設定ファイルで指定し、アプリケーションの必要に合わせ、facebook
、twitter
、linkedin
、google
、github
、gitlab
、bitbucket
キーを使用してください。一例をご覧ください。Before using Socialite, you will also need to add credentials for the OAuth services your application utilizes. These credentials should be placed in your config/services.php
configuration file, and should use the key facebook
, twitter
, linkedin
, google
, github
, gitlab
or bitbucket
, depending on the providers your application requires. For example:
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => 'http://your-callback-url',
],
">Tip!!
redirect
オプションが相対パスである場合、自動的に完全なURLへ解決されます。{tip} If theredirect
option contains a relative path, it will automatically be resolved to a fully qualified URL.
ルートRouting
これで、ユーザーを認証する準備ができました。2つのルートが必要になります。ひとつはOAuthプロバイダへユーザーをリダイレクトするルート、もう一つは認証後にプロバイダーからのコールバックを受けるルートです。Socialite
ファサードを使用し、Socialiteにアクセスしましょう。Next, you are ready to authenticate users! You will need two routes: one for redirecting the user to the OAuth provider, and another for receiving the callback from the provider after authentication. We will access Socialite using the Socialite
facade:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\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
メソッドは送られて来たリクエストを読み、プロバイダからユーザーの情報を取得します。The redirect
method takes care of sending the user to the OAuth provider, while the user
method will read the incoming request and retrieve the user's information from the provider.
コントローラメソッドへのルートを定義する必要があります。You will need to define routes to your controller methods:
Route::get('login/github', 'Auth\LoginController@redirectToProvider');
Route::get('login/github/callback', 'Auth\LoginController@handleProviderCallback');
オプションのパラメータOptional Parameters
多くのOAuthプロバイダがリダイレクトリクエスト中のオプションパラメータをサポートしています。リクエストにオプションパラメータを含めるには、with
メソッドを呼び出し、連想配列を渡します。A number of OAuth providers support optional parameters in the redirect request. To include any optional parameters in the request, call the with
method with an associative array:
return Socialite::driver('google')
->with(['hd' => 'example.com'])
->redirect();
Note:
with
メソッドを使用時は、state
やresponse_type
などの予約キーワードを渡さないように注意してください。{note} When using thewith
method, be careful not to pass any reserved keywords such asstate
orresponse_type
.
アクセススコープAccess Scopes
ユーザーをリダイレクトする前に、scopes
メソッドを使用し、リクエストへ「スコープ」を追加することもできます。このメソッドは、存在する全スコープを皆さんが指定したものへマージします。Before redirecting the user, you may also add additional "scopes" on the request using the scopes
method. This method will merge all existing scopes with the ones you supply:
return Socialite::driver('github')
->scopes(['read:user', 'public_repo'])
->redirect();
setScopes
メソッドを使用し、存在するスコープをすべてオーバーライトできます。You can overwrite all existing scopes using the setScopes
method:
return Socialite::driver('github')
->setScopes(['read:user', 'public_repo'])
->redirect();
ステートレスな認証Stateless Authentication
stateless
メソッドは、セッション状態の確認を無効化するために使用します。これはAPIへソーシャル認証を追加する場合に便利です。The stateless
method may be used to disable session state verification. This is useful when adding social authentication to an API:
return Socialite::driver('google')->stateless()->user();
Note: {note} Stateless authentication is not available for the Twitter driver, which uses OAuth 1.0 for authentication.
ステートレスな認証は、認証にOAuth1.0を使用しているTwitterドライバでは利用できません。
ユーザー詳細情報の取得Retrieving User Details
ユーザーインスタンスを取得したら、詳細情報をもっと取得できます。Once you have a user instance, you can grab a few more details about the user:
$user = Socialite::driver('github')->user();
// OAuth Twoプロバイダ
$token = $user->token;
$refreshToken = $user->refreshToken; // 常に提供されているとは限らない
$expiresIn = $user->expiresIn;
// OAuth Oneプロバイダ
$token = $user->token;
$tokenSecret = $user->tokenSecret;
// 全プロバイダ
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();
トークンからのユーザー詳細情報の取得(OAuth2)Retrieving User Details From A Token (OAuth2)
ユーザーへの有効なアクセストークンを事前に取得している場合は、userFromToken
メソッドを用い、詳細を取得できます。If you already have a valid access token for a user, you can retrieve their details using the userFromToken
method:
$user = Socialite::driver('github')->userFromToken($token);
トークンとSecretからのユーザー詳細情報の取得(OAuth1)Retrieving User Details From A Token And Secret (OAuth1)
すでにユーザーに対する有効なトークン/secretペアを取得している場合は、userFromTokenAndSecret
メソッドを用い、詳細を取得できます。If you already have a valid pair of token / secret for a user, you can retrieve their details using the userFromTokenAndSecret
method:
$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);