こんにちは。
先日、友達がシステムの実装を行なっている時に、
「phpでFacebookでログインを実装したいけど詰まった」と言っていまして、
そんな難しいものでもないだろうと思ったら、そのとおり簡単だったのですが
調べる事も結構ありましたので、
備忘録として、ここに残しておきます。
有難いことに、Facebook公式がsdkを公開してくれています。
これがあるのと無いのでは天と地との差があります。
さくっと手に入れてしまいましょう。
リンクはこちら。https://github.com/facebook/Facebook-php-sdk
上記のリンクをクリックして、「ZIP」をクリック。
ダウンロードが始まるので、適当なディレクトリに解凍して、
「src」フォルダとその中身を、Facebookでログインを使いたいphpファイルと同じ場所へ置いて下さい。
これでOKです。次に行きましょう。
Facebookでログインをするには、ユーザ情報を得る元となるアプリケーションが必要になります。
Twitterでも同様ですね。では早速作っていきます。
ですが、アプリケーションの作成については多くの資料があり、
まんまコピー&ペーストで出来たので参考にさせて頂いたリンクをご紹介します。あとはぐぐれ。
アプリケーションの作成は手順はやや多いですが、
上記のサイト様を見ればすぐに分かると思います。
アプリケーションが作成できたら、次へ進みましょう。
Facebook-php-sdkのソースを見れば、
丁寧に書かれているので、分かると思うのですが、それじゃ備忘録にならないので書きます。笑
ソース読むのに抵抗がある。
という方もいると思うので、手順を噛み砕きます。
必要なファイル構成
まずこれを整えます。同じディレクトリに、srcとindex.phpを置きます。こんな感じ。
/
+- src(facebook-php-sdkのsrcです)
+- index.php
今回は、この構成で実装します。たったこれだけです。
説明の前に、実際に動くサンプルを作りましたので、そちらを参考にしてみて下さい。
ログインをして、ユーザ情報を表示するだけのサンプルです。
サンプルを見ればなんとなく分かると思います。
ログイン時には、
index.php -> Facebook -> アプリで設定したURLへリダイレクト(ログイン完了)
という順番になります。ログアウトするときは、
index.php -> Facebook -> 指定したURLへリダイレクト -> セッションをリセット -> ログアウト完了
と、少々手順が増えます。
このような処理を実際に書いていきます。
ただ、サンプルは無駄なものが多めに入っているので、最低限必要な機能だけを書いていきます。
さて、お待ちかねの実装です。
まずいじるファイルは「index.php」です。
index.phpを開いて下記の内容を記入。
**※<?php
の?の手前にスペースが空いていますが、削除して下さい。**
<?php
// facebookSDKを読み込み
require_once("src/facebook.php");
// アプリの情報を$configに格納
$config = array(
'appId' => "登録したアプリのID",
'secret' => "取得したアプリのsecret"
);
$facebook = new Facebook($config);
$user = $facebook->getUser();
まずはこれだけ。
これで、もしindex.phpにアクセスしたユーザーがアプリにログインしていれば、
$userにはユーザIDが入っています。
ログインしている場合と、していない場合で処理を分けたいので、
index.phpに下記を追加して下さい。
// もしユーザがログインしていたら
if ( $user ) {
// ログアウトURLを生成
$logoutUrl = $facebook->getLogoutUrl();
// ユーザ情報を取得
$user_info = $facebook->getUser();
// ログアウト用のリンクを出力
echo "[ログアウト](".$logoutUrl.")";
// ユーザ情報を出力
print_r($user_info);
} else {
// ログインURLを生成
$loginUrl = $facebook->getLoginUrl();
echo "[facebookでログイン!](".$loginUrl.")";
}
実にシンプルですが、これで完了です。
作成したindex.phpをサーバにアップロードして、アクセスしてみて下さい。
いかがでしょうか。
リファレンス通りにやった(言い訳)のですが、動かないなど何かしらの不具合が御座いましたら、
コメントにてご一報よろしくお願い致します。
ちなみに私はログアウトが上手く動かなかったため、上記のgetLogoutUrl()ではなく、
自前でログアウト用のURLと、多少の処理を付け加えました。
それについては、また別の記事として書きます。