PHP
Facebook
OAuth
HybridAuth

HybridAuthを利用したOAuth認証(Facebook編)

More than 1 year has passed since last update.


背景

お客様依頼にて、HybridAuthを利用してOAuth認証を実現したいという要望があり、実現方法を調査した。


環境


サーバー環境


  • OS:CentOS6.5

  • クラウド:AWS

  • PHP5.6


    • Composerを利用




実装

基本的には以下のページを読み進めて行けば実現可能だが、 (1)英語であること(2)OAuthの仕組み(流れ)がややこしく、実装経験がないと詰まりやすい という点に注意。

Facebook Authentication - HybridAuth


Facebook Developers上の設定

Facebook Developers にアクセスし、ブラウザからアプリケーションの設定を実施する必要がある。

設定の流れは大きく以下のとおり。


  1. アプリケーションの登録を行う

  2. 実際にOAuth認証機能を設置するサーバーのURLを設定する

  3. 登録後、App IDApp Secretを取得する


  4. App IDApp 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.phpauth.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よりも多いということも要因の一つであり、認証が強固になっているのだと思います。