*

CakePHPでFacebook-PHP-SDKを使ってFacebookログインするアプリの作り方

公開日: : 最終更新日:2014/09/30 WEBサービス, テクニック , , , ,

#Vapefam we heard you! Our Facebook login is now working 100%. Sign up today and show some support to your favorite shops by leaving a review! If you are signing up via email make sure to check you spam inbox for the confirmation email #vapeon !!

こんにちは!
昨日は東京では45年ぶりに大雪が降りましたね!

自分の家の方でも雪が20cmくらい積もって、子供が大喜びしてました。
親は寒いし、濡れるし、たまったもんじゃなかったですけどねww

今日は、前回Composerで作ったCakePHPの環境を使って、Facebookログインするアプリを作ってみます。
早速やってみましょう。

1.Facebookアプリを新規で登録

Facebookアプリ開発者ページから、新規でアプリを登録します。
まずはここからです。

Facebookアプリ開発者
https://developers.facebook.com/apps

「Display name」に、利用したいアプリの名前を入力しましょう。
「Namespace」には、URLで使うアプリの名称を入れます。
(http://apps.facebook.com/●●●●/ の「●●●●」部分になります)

基本設定の画面に進むと、「アプリID」と「アプリのシークレットキー」が表示されます。
後の作業のためにこれをメモしておきます。

「設定」タブを押して「Add platform」します。
ここでは「App on facebook」を選び、「キャンバスページURL」と「Secure Canvas URL」を入力します。

「キャンバスページURL」はアプリを設置するURLで、「Secure Canvas URL」はSSLで保護されたアプリを設置するURLです。

2.FacebookSDKを導入

Facebook開発の公式ページを見ると、Githubからダウンロードしてね、と書いてあるので、Githubからダウンロードします。
ダウンロードしたら、フォルダ名を「facebook」とかに変更します。早速CakePHPの「Vendor」に設置しましょう。
パスは「app/Vendor/facebook」になります。

このSDKのおかげで、facebookログインがとても簡単にできるんですね。

3.Controllerを作成する

ここではFacebookに接続するためのアプリ、「FbconnectController.php」を作成します。
app/Controller/FbconnectController.php

<?php

//【1】facebook認証
App::uses('AppController', 'Controller');
App::import('Vendor','facebook',array('file' => 'facebook'.DS.'src'.DS.'facebook.php'));

class FbconnectController extends AppController {
	public $name = 'Fbconnect';

	function index(){

	}

	function showdata(){//トップページ
		$facebook = $this->createFacebook();	//【2】アプリに接続
		$myFbData = $this->Session->read('mydata');		//【3】facebookのデータ
		$this->set('myFbData', $myFbData);
	}

	//facebookの認証処理部分
	public function facebook(){
		$this->autoRender = false;
		$this->facebook = $this->createFacebook();
		$user = $this->facebook->getUser();		//【4】ユーザ情報取得
		if($user){//認証後
			$me = $this->facebook->api('/me','GET',array('locale'=>'ja_JP'));	//【5】ユーザ情報を日本語で取得
			$this->Session->write('mydata',$me);		//【6】ユーザ情報をセッションに保存
			$this->redirect('showdata');
		}else{//認証前
			$url = $this->facebook->getLoginUrl(array(
			'scope' => 'email,publish_stream,user_birthday','canvas' => 1,'fbconnect' => 0));   //【7】スコープの確認
			$this->redirect($url);
		}
	}

	private function createFacebook() {        //【8】appID, secretを記述
		return new Facebook(array(
			'appId' => 'xxxxxxxxxxxxxxxxxxx',
			'secret' => 'xxxxxxxxxxxxxxxxxxx'
		));
	}
}

コメントの部分を解説します。

【1】2.で導入したSDKを読み込みます。

【2】この部分でアプリに接続します。ここでは関数にして分けています。

【3】この後出てくる【6】で保存したセッションを読み出します。

【4】ユーザ情報を取得します。この処理の後でログインしているかしていないかを判別します。

【5】ユーザ情報を日本語で取得することを、明示的に表記します。

【6】取得したユーザ情報をセッションに保存します。

【7】ログインしていない場合、どの範囲までアプリに情報を渡すかを表示します。ここではメールアドレス、タイムライン、誕生日、iflameの入れ子になった状態でのリダイレクトをユーザに確認します。

【8】1.でメモしておいたapp IDとapp secretを入力します。

とりあえずここまででControllerは完成です。

4.viewを作る

viewを作ってみます。
app/View/Fbconnect/index.ctp

Facebookでログインします。<br />
<a href="facebook">facebook connect</a>

次に、ユーザ情報を表示するページをつくります。
app/View/Fbconnect/showdata.ctp

写真:<br />
<img src="https://graph.facebook.com/<?php echo $myFbData['id']; ?>/picture?type=large"><br />
<br />
名前:<br />
<?php echo $myFbData['name']; ?><br />
<br />
リンク:<br />
<?php echo $myFbData['link']; ?><br />
<br />
誕生日:<br />
<?php echo $myFbData['birthday']; ?><br />
<br />
性別:<br />
<?php echo $myFbData['gender']; ?><br />
<br />
メール:<br />
<?php echo $myFbData['email']; ?><br />
<br />
場所:<br />
<?php echo $myFbData['locale']; ?><br />

「$myFbData」という変数にユーザデータが入っています。
必要なデータは配列になってるので、指定して表示してみましょう。

今日はここまでです!
次回はログアウトと、タイムラインにポストする機能をつけてみます!

Google AD


Comment

  1. もと より:

    記事ありがとうございます。

    記事通りに記述したものを作成したのですが、以下のようなメッセージがでてきてしまいます。
    解決方法ありましたら教授ください

    Error: Call to a member function read() on a non-object
    File: /Applications/MAMP/htdocs/fb/app/Controller/FbconnectController.php
    Line: 15

    <Fbconnect.php>————
    ‘facebook’.DS.’src’.DS.’facebook.php’));

    class FbconnectController extends AppController {
    public $name = ‘Fbconnect’;

    function index(){

    }

    function showdata(){//トップページ
    $facebook = $this->createFacebook(); //【2】アプリに接続
    $myFbData = $this->Session->read(‘mydata’); //【3】facebookのデータ
    $this->set(‘myFbData’, $myFbData);
    }

    //facebookの認証処理部分
    public function facebook(){
    $this->autoRender = false;
    $this->facebook = $this->createFacebook();
    $user = $this->facebook->getUser(); //【4】ユーザ情報取得
    if($user){//認証後
    $me = $this->facebook->api(‘/me’,’GET’,array(‘locale’=>’ja_JP’)); //【5】ユーザ情報を日本語で取得
    $this->Session->write(‘mydata’,$me); //【6】ユーザ情報をセッションに保存
    $this->redirect(‘showdata’);
    }else{//認証前
    $url = $this->facebook->getLoginUrl(array(
    ‘scope’ => ‘email,publish_stream,user_birthday’,’canvas’ => 1,’fbconnect’ => 0)); //【7】スコープの確認
    $this->redirect($url);
    }
    }

    private function createFacebook() { //【8】appID, secretを記述
    return new Facebook(array(
    ‘appId’ => ‘1562964583932351’,
    ‘secret’ => ‘c2d55eb72a6aa180a82f5fcd9a3f28a5’
    ));
    }
    }

  2. rainy4649 より:

    もとさん
    コメントありがとうございます。自分でももう一回やってみたところ、エラーが出てしまいました。。(もとさんのものとは違うエラーでした)

    ちなみに「Error: Call to a member function read() on a non-object」は、メソッドをオブジェクトでないところで使用したときに出るエラーです。

    ちょっとあとで調べて、いつかもう一度まとめなおします。

    ソースコードのほうはタグの関係で記載できないので、こちらのいのうぇさんのサイトを参照していただければと・・。
    cakephp Facebook認証

  3. もと より:

    お願いします。助かります

rainy4649 へ返信する コメントをキャンセル

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

wordpressのパーマリンク設定を変更してみたら大丈夫だった件

wordpressでパーマリンクを変えようと思ってたんですが、なかなか踏み切るタイミングがな

記事を読む

no image

「おっ」思ったWEBデザイン

ちょっと調べることがあったのでメモ。■株式会社テトラシーンhttp://www.tetratone.

記事を読む

no image

SVNリポジトリでコミットできなかった件

ベンダーさんに、先日立てたSVNリポジトリにコミットできないと連絡いただき、調べたところ、権限が

記事を読む

【アフィリエイト】WordPressプラグイン「AmazonJS」をインストールしてみました

ずん飯尾という芸人さんがいます。 中でも「現実逃避シリーズ」がプチブレイクしていて、現実離

記事を読む

no image

ブログ更新情報をTwitterに流す、FeedBurnerの「Socialize機能」

タイトルの通り、ブログの更新情報をTwitterに流す方法。 結論から言うとFeedBurnaer

記事を読む

composerでcakephpをインストールしてプロジェクトを始めてみる

こんにちは!今日も寒いです。 この時期になると気になってくるのが花粉症です。 自分は花粉

記事を読む

cakephpでユーザ定義定数を読みだす方法

サイトを作るにあたって、定数を使いたいときがよくあります。 サイト上のある数値に変更があっ

記事を読む

no image

eclipseのリソース名を変更する

ちょっとキョドったのでエントリー。 1. eclipse > エクスプローラー から名前を変更

記事を読む

no image

windows7のxamppでvirtual hostを設定する

忘れないように忘れてもいいようにエントリー。 タイトルの通りです。 c:/xampp/a

記事を読む

PV5000/月達成したのでまたGoogleAnalyticsのデータを公開します

めちゃくちゃに力を入れていた訳でもなく、特にすごいコンテンツをエントリーした訳でもないのに、

記事を読む

Google AD

Google AD

PAGE TOP ↑