cakePHPでFacebookログイン

前の記事で予想がついている方もおられるかと思いますが、facebookログインするサイトを作っています。
RubyじゃなくてPHPで。人生何が起こるかわからないものですね。

さすがに生のPHPは書いてられないので、CakePHPを使っています。
ということで、今日の記事は、CakePHP+FacebookSDKです。
ぐぐれば似たような記事はいくつか出てくるのですが、いずれも記述が古くて動かなかったので、僕バージョンをまとめました。これも半年位すると動かなくなるのかもしれないですが。

さて、PHPでFacebookのOAuth2.0ログインを実装するやり方については、公式サイトに記述があります。
Login for Server-side Apps - Facebook Developers
ただこれだとAPI呼び出しが面倒なので、Facebook公式のfacebook-php-sdkをつかいます。
facebook-php-sdkの利用サンプルも、ぐぐればたくさん出てきますが、その大半は古い内容で現在のSDKでは動きません(getAccessToken()をわざわざ呼び出しているのは古いコードです。)
Migrating to OAuth 2.0 update: PHP SDK v.3.1.1- Facebook Developersを参考に書き直したのがこちら。 要するに、$facebook->getUser()して取れたらログイン成功、取れなかったらログインURLにリダイレクトすればOKです。昔のSDKで必要だったgetAccessTokenの呼び出しは、SDKが内部で処理してくれるようになりました。
コールバック引数を見てアレコレする部分もSDKが面倒を見てくれるので、login.phpとcallback.phpのように二つのファイルを作る必要すらありません。PHP用のSDKらしい実装ですね。


これを踏まえて、CakePHPでFacebookContollerを書いたのがこちら。
  • facebook SDKは、/app/Vendor/facebook/の下に配置。
  • appidとsecretは、bootstrap.phpに
    Configure::write('facebook',array(
      'appid'=>'***',
      'secret'=>'***'
    ));
    
    という具合に。
一応loginとcallbackを分けておきましたが、getUser()部分をbeforeFilterに移動させれば、ひとつのメソッドにまとめてしまうことも可能だと思います。
もっといえば、FacebookControllerというクラスを用意しなくても、ほかのControllerのbeforeFilterに書いてしまってもかまわないかも知れないですね。

カテゴリ:

トラックバック(0)

このブログ記事を参照しているブログ一覧: cakePHPでFacebookログイン

このブログ記事に対するトラックバックURL: http://mogya.com/mt/mt-tb.cgi/1613

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、 もぎゃが 2013年4月18日 00:51に書いたブログ記事です。

ひとつ前のブログ記事は「 [iOS] タブを残さずURLスキームを開く 」です。

次のブログ記事は「 FacebookSDKがCakePHPのSessionを使うようにする 」です。

最近のコンテンツは インデックスページ で見られます。過去に書かれたものは アーカイブのページ で見られます。

Powered by
Movable Type