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ユーザの流入を期待する戦略としては十分活用できそうな気がします。
コメントする