PHPプログラミング

最終更新日:
公開日:

レシピ

Facebook PHP向けSDK

Facebookログインの実装

PHP向けSDKを使ったFacebookログインの実装方法について解説します。

この記事のポイント

  • WebサイトやアプリにFacebookログインを使ったログイン方法を導入する
  • Facebookアプリ管理ページで必要な設定を確認する

目次

アプリに便利なFacebookログイン

今回はSDKを使ってシンプルなFacebookログインを実装していきます。
この仕組みを応用すると、Webサイト(アプリ)にFacebookアカウントによるログインを導入することができます。

PHP向けSDKがすでにインストールされていることを前提にしています。
これからインストールする方は、まずは「FacebookのPHP向けSDKで何ができるの?使用するための準備」をご覧ください。

ファイル構成

最初にファイルの構成を確認しておきます。
今回作成するシステムは基本部分のみを抑えた非常にシンプルなものです。

作成するファイルは「index.php」と「callback.php」の2つのファイルです。
同じ階層にSDKのフォルダ「php-graph-sdk-master」も設置しています。

  • index.php – Facebookログインのリンクを設定
  • callback.php – ログイン後のリダイレクト先。ログイン後の各種処理を行う

ファイル構造

Facebookアプリの設定を確認

FacebookログインはFacebookDeloperへ登録したアプリのみ使用できる仕組みです。
そのため、アプリ側の設定も必要です。

Facebookの開発者用ページから、該当するアプリの設定画面を開いてください。
Facebook for Delopers

プロダクトから「Facebookログイン」を選択すると、次のような設定ページが表示されます。
もしプロダクトに「Facebookログイン」が見当たらない場合は、「+ 製品を追加」で追加してください。

設定ページでは、「有効なOAuthリダイレクトURI」を設定します。
ここでFacebookログインを行った後のリダイレクト先のURIを指定してください。
今回の例では「callback.php」を設定します。

設定後、ページ下部の「変更を保存」ボタンを押して完了です。

ログイン後のページを作成

まずは、Facebookログインへのリンクを設定する「index.php」から作成します。

index.php

<?php
session_start();
date_default_timezone_set('Asia/Tokyo');

require_once 'php-graph-sdk-master/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
  'app_id' => 'アプリID',
  'app_secret' => 'App Secret',
  'default_graph_version' => 'v2.7'
]);

$helper = $fb->getRedirectLoginHelper();

$scope = ['public_profile'];
$link = $helper->getLoginUrl( 'https://gray-code.com/fb/callback.php', $scope);
?>
<a href="<?php echo htmlspecialchars($link); ?>">Login</a>

コードの内容を解説していきます。

2、3行目では、セッションの使用開始とタイムゾーンの設定を行っています。
いわば、システムの初期化です。この2行は地味ですが非常に大切です。

その次はFacebookSDKの読み込みです。
その後ろで早速、Facebookクラスのインスタンスを生成しています。
ここの「アプリID」「App Secret」「APIバージョン」は必要に応じて書き換えてください。

13行目では、FacebookログインのURLを生成するヘルパーを作成しています。
単純に、ログインURLを生成するツールと思ってください。

その後、アプリのスコープを設定し、ヘルパーのgetLoginUrl関数で実際にログインURLを生成しています。
スコープとはアプリがFacebookアカウント(またはFacebookページなど)のデータにアクセスできる権限を指定します。
今回のシステムの目的は単純にFacebookログインの実装なので、とりあえず「public_profile」を設定しています。

設定できるスコープは、Facebook公式リファレンスを参照してください。
アクセス許可のリファレンス – Facebookログイン

最後に、a要素でログインURLを出力して終了です。

Facebookログインの入り口を作成

次に、Facebookログイン後のリダイレクト先となるページを作成していきます。
こちらに、ログイン後に行いたい処理を記述します。今回は単純に取得したデータをダンプ出力します。

callback.php

<?php
session_start();
date_default_timezone_set('Asia/Tokyo');

require_once 'php-graph-sdk-master/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
  'app_id' => 'アプリID',
  'app_secret' => 'App Secret',
  'default_graph_version' => 'v2.7',
]);

$helper = $fb->getRedirectLoginHelper();

try {
  $access_token = $helper->getAccessToken();
  $res = $fb->get( '/me', $access_token);

} catch(Facebook\Exceptions\FacebookResponseException $e) {
  echo $e->getMessage();
  exit();

} catch(Facebook\Exceptions\FacebookSDKException $e) {
  echo $e->getMessage();
  exit();
}

var_dump($res->getDecodedBody());

ヘルパーを呼び出す部分(13行目)までは「index.php」と同じです。

try文の中では、まずは発行されたアクセストークンを取得します。
そして次の行で、取得したアクセストークンを渡しながらGraphAPIを呼び出し、Facebookアカウントのデータを取得する処理になります。

もしこの時にアクセストークンが取得できなかったり、不正なアクセスと判断されたら例外が投げられ、エラー内容を出力して終了します。

無事に目的にデータを取得できたら、最後にデータ内容をvar_dump関数で出力して終了します。

取得したデータの出力例

array(2) {
  ["name"]=> string(12) "灰色太郎"
  ["id"]=> string(16) "1180745805331220"
}

Note

callback.php」で再読み込みを繰り返すと、「Cross-site request forgery validation failed. Required param “state” missing from persistent data.」というエラーが表示されてしまいます。

これは「index.php」からログインし、「callback.php」へリダイレクトという正規のルートを通っていない場合に表示されるエラーです。

以上、Facebookログインの実装でした。

ここまでの流れが一通り行えるようになると、アプリのスコープ(データへのアクセス権限)を調整したり、GraphAPIの内容を変えることでFacebookと連携した様々な処理を行うことができます。