背景
お客様依頼にて、HybridAuthを利用してOAuth認証を実現したいという要望があり、実現方法を調査した。
環境
サーバー環境
- OS:CentOS6.5
- クラウド:AWS
- PHP5.6
- Composerを利用
実装
基本的には以下のページを読み進めて行けば実現可能だが、 (1)英語であること 、 (2)OAuthの仕組み(流れ)がややこしく、実装経験がないと詰まりやすい という点に注意。
Facebook Authentication - HybridAuth
Facebook Developers上の設定
Facebook Developers にアクセスし、ブラウザからアプリケーションの設定を実施する必要がある。
設定の流れは大きく以下のとおり。
- アプリケーションの登録を行う
- 実際にOAuth認証機能を設置するサーバーのURLを設定する
- 登録後、App ID、App Secretを取得する
- App ID、App Secretは後の手順で利用するために、必ず控えておくこと
Hybridauthのインストール
Composerを利用してセットアップするのが楽ちん。
以下の作業はドキュメントルートで実施。
1.Composerのサイトから composer.pharをダウンロードしてくる。
2.composer.jsonというファイルを用意し、以下の内容を記述する。
{
"name": "genzouw/hybridauth_example",
"authors": [
{
"name": "genzouw",
"email": "genzouw@gmail.com"
}
],
"require": {
"hybridauth/hybridauth": "2.2.2"
}
}
3.コマンドラインから、以下のコマンドを実行する。
$ php composer.phar install
といろいろ書いたが、ドキュメントルートに以下のファイルを展開したものを配置するだけでも良い。
4.最後にindex.php、auth.phpというファイルを作成し、以下の内容を記述する。
ここでの注意は、**#Server IP#**には自分のサーバーのIPアドレス(もちろんドメインでもOK)、#App ID#, #App Secret#**には先程のFacebookページで設定した最後のページに表示されている値をセットすること。
<?php
require_once __DIR__ . '/vendor/autoload.php';
$config = array(
"base_url" => "http://#Server IP#/auth.php",
"providers" => array (
"Facebook" => array (
"enabled" => true,
"keys" => array ( "id" => "#App ID#", "secret" => "#App Secret#" ),
"scope" => "email, user_about_me, user_birthday, user_hometown", // optional
// "display" => "popup" // optional
)));
use hybridauth\Hybrid\Auth;
$hybridAuth = new Hybrid_Auth( $config );
$adapter = $hybridAuth->authenticate( "Facebook" );
$userProfile = $adapter->getUserProfile();
echo '<pre>'; var_dump($userProfile); echo '</pre>';
auth.phpについては、もうこういうおまじないだと思ってつくったらOK。
<?php
require_once __DIR__ . '/vendor/autoload.php';
require_once "vendor/hybridauth/hybridauth/hybridauth/index.php";
5.index.phpにアクセスすると、Facebookの認証が行われる。
認証が成功すれば、ユーザー情報が出力されるはずです。
あとがき
Twitter OAuthで躓く人は少ないですが、Facebook OAuthで躓く方はちらほらいらっしゃいます。
僕も何度もつまづきました。
Facebook Graph APIで取得できる情報がTwitterよりも多いということも要因の一つであり、認証が強固になっているのだと思います。