[Facebook SDK for PHP v5.0]を利用してログイン認証をおこなう[Oauth]

2016年3月14日

PHP

Facebook SDK for PHP v5.0(記事作成時)を利用して、Facebookでログインができる認証機能を作成します。

 

Facebook SDK for PHPは公式に用意されたライブラリで、Graph API(FacebookのソーシャルグラフAPI)を利用することによってユーザの様々な情報を取得し、また投稿などの機能を自分のウェブページに実装することができます。

 

Facebook SDK for PHPはComposerで管理することができますが、今回はManually installingから直接ファイルをダウンロードして利用します(記事作成時:facebook-php-sdk-v4-5.0.0ファイル)。

 

デモ画面

 

デモは名前、性別などを表示させているだけで、投稿したり、ユーザ情報をデータベースには保存したりすることはございません。

 

 

スポンサーリンク

 

 

今回作成したアプリケーション(デモ画面)は、Facebookの名前・性別などのユーザ情報を取得する部分までを実装しました。

 

プログラミングの前にまずは以下のリンク先ページにてアプリの申請登録(Add a New App)をおこない、「App ID」と「App Secret」を取得しておきます。またSettings画面の「Client OAuth Settings」項目にある「Valid OAuth redirect URIs」の部分には、のちに説明するcallback.phpを、自分でアップした先のURLを登録しておいて下さい。

 

facebook for developers

 

Valid OAuth redirect URIsにcallback.phpのURLを登録しておく

Valid OAuth redirect URIs

 

OAuth自体の詳しい説明はしませんが、今回作成するFacebook SDK for PHPによる認証部分の流れは、以下の様になります。

 

認証フロー

 

1. 利用しているブラウザでFacebookにログインしていない場合は、一旦Facebookのログイン画面が表示されます。

2. ウェブアプリケーションに初めて登録しようとすると表示されます。

3. 2の画面で「OK(ユーザがアプリに対して個人情報の使用を許可する)」をクリックすると、「Valid OAuth redirect URIs」で指定したファイル(callback.php)にリダイレクトされます。

4. アクセストークンを取得したら、member.phpへリダイレクトさせます。(callback.php)

5. アクセストークンを元にユーザ情報を取得します。(member.php)

 

以上が大まかな流れですが、OAuthを利用するプログラミングにおいて、アクセストークンを取得することがの第一の目的だと考えても良いでしょう。

 

 

ディレクトリ構成

facebookディレクトリ

ダウンロードしたファイルの facebook-php-sdk-v4-5.0.0 > src > Facebook が実際に利用するライブラリです。

 

 

config.php(設定ファイル)

 

5・6行目

App ID」と「App Secret」を設定します。

 

 

index.php

 

17行目

ウェブアプリケーションに初めて登録しようとすると、以下のような認証画面が表示されます。その際にユーザに対してどのような情報を取得するのかを文言で喚起させます。オプションの内容によって「あなたの〜」以降の文言が変わります。

 

アプリ認証

 

18行目

引数に、アプリのSettings画面の「Client OAuth Settings」>「Valid OAuth redirect URIs」で設定したURLと、認証内容のオプションを設定します。

 

 

callback.php

 

初めてウェブアプリケーションに登録する時にユーザが「OK(もしくはキャンセル)」をクリック、またはindex.phpからログインした際に呼ばれるファイルです。19行目にてアクセストークンを取得して、33行目にてそのアクセストークンをセッションに保存しています。

 

アクセストークンを取得すれば、実質的にログイン状態となります。このファイルでは35行目にてmember.phpへと画面遷移させています。

 

 

member.php

 

ログイン後の画面です。アクセストークンを保持していれば、常にユーザ情報を取得することが可能です。アクセストークンは、一ユーザに対して一意的に与えられるので、この値(もしくは34行目のID)をデータベースなどに格納しておけば、既存のユーザであるのかを判定することができます。

 

ただし、callback.phpの19行目($helper->getAccessToken())において取得するアクセストークンは、その都度新しいアクセストークンが生成されているのでデータベースの値も更新しておく必要があります(古いアクセストークンでもユーザ情報は取得できます)。

 

 

61〜77行目

このスクリプトが無いと、ログイン後のURLでmember.phpの後ろに #_=_ が付加されています。Facebook側の仕様のようですが、このスクリプトを記述しておけば取り除くことが可能です。

 

参照ページ

Facebook Callback appends ‘#_=_’ to Return URL

 

 

logout.php

 

 

 

参照ページ


 

Facebook SDK v5 for PHP

 

 

 

 

Copyright © 2017 ウェブの葉 All Rights Reserved.  プライバシーポリシー