Logicky Blog

Logickyの開発ブログです

cakePHPでfacebookアプリをつくる(facebookでログイン)

cakePHPだと普通のPHPのSDKなどがうまく使えなかったりする場合がおます。

facebookはtwitterのapiと比較すると非常に懇切丁寧でありまして、ドキュメントも分かり易ければ実際の操作も非常にお手軽になっているケースが多く、加えてJavascriptだろうがPHPだろうが、スマホネイティブだろうが、なんでもそれに合わせたSDKを用意してくれています。私はPHP特にcakePHPでfacebookからログインできるようなサイトをつくろうと思って調べていたところ、下記ページを発見いたしました。

CakePHPでFacebookにConnect、wallに投稿する機能つくってみました。

これを見て、facebookが用意してくれているSDKを問題なく使えることが分かりました。ただ、「作業手順4.facebook-php-sdkのbase_facebook.phpをすこしいじる。」という記載があったのですが、これもすっとばしてもいけるんじゃないかという適当な予想のもとやってみたらすっとばしてもログイン機能の実装までにおいては問題ございませんでした。メモとしてログイン機能の実装のコードを記載します。

コードの前に、準備作業のポイントも記載します。

1.ダウンロードしたSDKのsrcフォルダに格納されている3ファイル(facebook.php、base_facebook.php、fb_ca_chain_bundle.crt)をapp>vendors>facebookに格納しました。(facebookフォルダは新規作成します)

2.コントローラーに上記SDKファイルをインポート設定するべく、コントローラーの一番上の行に、下記を記載しました。

App::import('Vendor','facebook',array('file' => 'facebook'.DS.'facebook.php'));


3.createFacebookという下記のようなfunctionをコントローラーに記載します。

private function createFacebook() {
  return new Facebook(array(
         'appId'  => 'あなたのappID',
         'secret' => 'あなたのシークレットコード',
     ));
    }


4.下記のようなコードをコントローラーに記載し���す。例えばindexアクションにユーザが訪れた際に、「ユーザーのfacebookでのログイン状態をチェックして、未ログインだった場合は、ログインURLを画面に表示する。そのURLをユーザがクリックしたら、facebookのログイン画面に飛び、ログインが完了したらまた戻ってくる」という一連の作業を付加したい場合は、public function index()内に下記のようなコードを追加するだけです。

$facebook = $this->createFacebook();
$fb_user = $facebook->getUser();
if($fb_user){

}else{
        $par = array('scope' => 'publish_stream,read_friendlists');
        $fb_login_url = $facebook->getLoginUrl($par);
        $this->set('fb_url',$fb_login_url);
}
$this->set('fb',$fb_user);

『facebookのPHP-SDKで、ウォールに書き込んだり、フレンドリストを取得したり。』を参考にしたので、getLoginUrl()のパラメータは参考元のままです。内容について参考元参照です。状況に応じて空っぽだったり、追加・変更したりします。あと、もちろん、viewで$fbが空だったら$fb_urlを記載するとった記述が必要になります。

以上です。超お手軽ですね。あとは、ログインしているユーザをデータベースに格納したりする作業はログイン済みであることが分かった際にデータベース登録済みか確認して、未登録であれば追加するといった処理をすればいいのではないかと思っています。