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