CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

PHP用のFacebook SDKを利用して「Facebookでログインする」機能の実装にチャレンジします。

実証環境はPHP 7.0.15です。

Facebookでアプリ登録

まず初めに、Facebookでのログインを実現するには、Facebookでアプリ登録をする必要があります。
開発者向けFacebook

ヘッダ右上の「アプリを作成」ボタンを押して、アプリ名など必要事項を入力します。
アプリ作成後、アプリIDとapp secretを取得し、控えておきます。また、アプリに接続可能なドメイン「アプリドメイン」を登録します。
※Facebookアプリ登録には、Facebookでの電話認証済み、または、クレジットカード認証済みであることが前提です。

また、必要に応じて、アプリのカテゴリ、規約URL、プライバシーポリシーURLやアプリアイコン画像などを設定しておくとよいでしょう。

composerでPHP用のFacebook SDKをインストール

PHP用のFacebook SDKのインストールはcomposerで実行します。

まず、composer.jsonを開いて、以下の内容を追記します。

"require": {
	...
	"facebook/graph-sdk" : "~5.0",
	...
},


次に、composerをコマンドを実行して、パッケージをダウンロードします。

> php composer.phar self-update
> php composer.phar update

ディレクトリvendorにパッケージが展開されていればインストール成功です。

次に機能を利用するプログラムで、オートローダーを追記します。例えば以下のようにします。

require_once __DIR__ . '/vendor/autoload.php';

Facebookログイン処理

Facebookアプリを通してログインする処理を構築してみます。

まず、先ほど取得したアプリIDとアプリシークレットを使って、ログインリクエストのURLを生成してアクセスします。

session_start();
$fb = new Facebook\Facebook([
	'app_id' => '(先ほど取得したアプリID)',
	'app_secret' => '(先ほど取得したアプリapp secret)',
	'default_graph_version' => 'v2.5',
]);

$helper = $fb->getRedirectLoginHelper();
$login_url = $helper->getLoginUrl('(コールバックURL)');

header('Location: ' . $login_url);
exit;

この処理を実行すると、ブラウザでFacebookにログインしていない場合、Facebookでのログイン画面が表示されます。ログイン後、アプリへの登録がない場合は、アプリ認証画面へと遷移します。アプリ認証後は、アクセストークンを保持しながら任意のコールバックURLへと処理が移されます。
Facebookへログイン済み、また、アプリ認証済みであれば、そのままコールバックURLへと遷移します。

以下、コールバック処理です。

session_start();
$fb = new Facebook\Facebook([
	'app_id' => '(先ほど取得したアプリID)',
	'app_secret' => '(先ほど取得したアプリapp secret)',
	'default_graph_version' => 'v2.5',
]);

$helper = $fb->getRedirectLoginHelper();

try {
 	$access_token = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
	// error
} catch(Facebook\Exceptions\FacebookSDKException $e) {
	// error
}

アクセストークン「$access_token」が取得できていれば、Facebookへのログインは成功です。

引き続き、アクセストークンを使って、以下のようにしてログインしたユーザのFacebook ID、ユーザ名、メールアドレスと取得できます。

try {
	$response = $fb->get('/me?fields=id,name,email', $access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
	// error
} catch(Facebook\Exceptions\FacebookSDKException $e) {
	// error
}

$user = $response->getGraphUser();

$user->getId();
$user->getName();
$user->getEmail();

これらFacebookから取得した情報を、既存アプリやCMSのDBと照合することで、Facebookログインが実現できます。

個人的にはFacebookありきのコンテンツ開発には抵抗がありますが、一方で、Facebookユーザの流入を期待する戦略としては十分活用できそうな気がします。

このエントリーをはてなブックマークに追加

Monthly Archives

Search