FacebookSDKがCakePHPのSessionを使うようにする

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です。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です