cakePHPでFacebookログイン[1/2] – もぎゃろぐで書いたとおり、
FacebookSDKをつかうと簡単にfacebookログインを実装することができます。,
FacebookSDKは、この簡単実装を実現するために、内部で$_SESSIONを呼び出して、accessTokenや CSRF対策のstate変数を保存しています。
この実装は、単純なWEBサーバであれば困らないのですが、複数のWEBサーバで分散処理するためにセッションをDBに保存する、というような設定をしている場合、 このままだと動かないことが予想されます。
CakePHPは、そういうときのためにセッションをデータベースに保存したりすることができるようになっていますので、FacebookSDKの変数も、CakePHPのセッションを使ってもらうようにしたいところです。
facebookのエンジニアの人たちは優秀なので、こういう用途も想定してSDKを書かれたようです。
facebookSDKのFacebookクラスは、ほとんどの実装がbase_facebook.phpのBaseFacebookクラスで実装されて、上記セッション変数の処理だけが、facebook.phpのFacebookクラスで実装されています。
なので、facebook.phpをコピーしたcakeFacebook.phpを作って、$_SESSIONの部分をcakePHPのCakeSessionに書き換えたCakeFacebookクラスを用意すれば、FacebookSDKもcakePHPの設定に従ってくれるようになります。
ということで出来上がったのがこちらになります。
facebook.phpと同じディレクトリに配置して
App::import(‘Vendor’, ‘facebook/cakeFacebook’);
$this->facebook = new CakeFacebook(array(
‘appId’ => Configure::read(‘facebook.appid’),
‘secret’ => Configure::read(‘facebook.secret’),
));
という具合にして使います。あとは通常のFacebookクラスと同じ使い方でOKです。