cakephp Facebook認証

みなさんこんばんは。
今回はcakephpFacebook APIを使った認証を実装したので紹介します。
全体の流れは以下の4つです。

1.Facebook developers登録
2.認証対象アプリの登録
3.facebook-php-sdkのダウンロード・設置
4.Controllerの作成

1つずつ確認していきます。

1.Facebook developers登録

まずFacebook developersにアクセス。
タイトルバー(?)の右側にある「Apps」をクリック。
ここでアカウントの登録をします。一からアカウントを作るわけではなくFacebookアカウントでログインする感じになります。
証明として電話番号かクレジット番号の登録があるのでお忘れなく。

2.認証対象アプリの登録

「Apps」をクリックした先から認証対象のアプリの登録をし、認証に必要となるAppIdとAppSecretを確認することとなります。
アプリの登録として必要となる項目はアプリ名とアプリ空間名です。アプリ空間名に関しては唯一のものを設定することになるのでチェックをしてください。
登録後、登録アプリの詳細画面(AppIdとかAppSecretが出てる画面)で、App DomainsとFacebookでログインが可能なウェブサイトの項目を対象となるアプリのドメイン名を入力しておきましょう。
実際にコードを書くとき、このAppIdとAppSecretを利用して認証を行なうことになります。

3.facebook-php-sdkのダウンロード・設置

githubからfacebook-php-sdkをダウンロードします(こちらから)。
ダウンロード後解凍し、出来上がったフォルダを各自わかりやすいようにリネームしましょう。私は「facebook」にしました(そのまんま
このfacebookというフォルダをcakephpのapp/vendorに設置します。app/vendor/facebookとなりますね。

4.Controllerの作成

今回はかなり簡易版を紹介したいと思います。
ソースは以下のとおり。
Controller↓

<?php
App::import('Vendor','facebook', array('file' => 'facebook'.DS.'src'.DS.'facebook.php'));//sdkのインポート
class FacebooktestController extends AppController {

        private function createFacebook() {
                return new Facebook(array(
                        'appId' => '登録されたAppId',
                        'secret' => '登録されたAppSecret'
                ));
        }

        public function index(){
                $facebook = $this->createFacebook();
                $fb_user = $facebook->getUser(); //これ大事
                debug($facebook);
                if($fb_user){
                        //ログインしている場合の処理
                }else{
         //ログインしていない場合の処理
                        $url = $facebook->getLoginUrl(array(
                                'scope' => 'facebookアプリに付与したい権限を好きなだけ(リファレンスを見てください)',
                                'canvas' => 1
                                ));
                        $this->redirect($url);
                }
        }
}
?>

indexページにアクセスしたとき認証がかかるようになっています。
$facebook->getUser()の戻り値でログインがしているかしていないか判断します。
ログインしていない場合(認証前)は認証先にリダイレクトされます。
このとき、getLoginUrlでscopeなどオプションが付与できるので、これは各自リファレンスを参考にし設定してみてください。

簡単なfacebook認証でしたが、自分はSNS連携したことなかったのでこれから面白いことできるといいなーと思ってます。

何か間違いがありましたらコメントよろしくお願いします。