COLUMN

Facebook PHP SDKを利用したユーザー認証について

前にFacebookアプリのユーザー認証の方法について書きましたが、
Facebookが提供しているPHP SDKを利用すればもっと簡単にユーザーの認証を行うことができます。
 
PHP SDKの利用方法について説明したいと思います。


アプリの登録が完了後、下記のコードでSDKの利用準備ができます。

$facebook = new Facebook(array(
'appId' => '登録したアプリのID',
'secret' => '登録したアプリの秘密鍵'
));

Facebook上のアプリであれば、アプリ管理画面から権限設定後、下記のコードのみでユーザー情報が取得できます。

$facebook->api('/me');

アプリ読み込み時にsignedRequestパラメーターが送信されて、その中にアクセストークンの情報も含まれていて、
SDKがapiを呼び出す際にそのアクセストークンを自動的に設定してくれるので、利用者は簡単にユーザー情報を取得することができます。
Facebook外のアプリからユーザー情報取得するには、上記より若干手間がかかります。

//パーミッションリクエスト送信
$loginUrl = $this->Facebook->getLoginUrl(array(
'redirect_uri' => 'リダイレクト先アプリページのURL',
'scope' => '取得したいパーミッションリスト'
));
header( 'location: ' . loginUrl );
//リダイレクト先ページ
$facebook->api('/me');

getLoginUrlでパーミッションダイアログのURLが生成できるので、パラメーターを設定後にURLを生成して、リダイレクトします。
リダイレクト後は以前の記事で説明したcodeが送られてくるので、このcodeからSDKがアクセストークンの取得、設定を行ってくれます。

一点注意して頂きたいのが、上記のコードでは明示的にアクセストークンの設定をしておらず、
api呼び出し時に設定され、セッションにも保存されます。
なのでapi呼出し後に別ページへ移動した場合は、別ページでもユーザー情報の取得が行えますが、
apiを呼び出す前に別ページへ移動してしまった場合、送られたcodeは処理されず、セッションにも保存されません。

なのでパーミッション後のリダイレクト先ページで、明示的に送られたcodeを処理し、セッションに保存することをお勧めします。
しかしSDKには具体的に上記の処理のみをするメソッドは定義されていません。
その代わりとしてgetAccessTokenを呼び出すと、code処理・セッション保存を行ってくれます。
無意味にapiを呼び出すよりはまだgetAccessTokenを呼び出すほうがいいと思います。