*

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. もと より:

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

Message

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

WP-SpamFree by Pole Position Marketing

関連記事

webサイトの表示速度スピードアップ

WEBサイトの表示速度をスピードアップする方法

サイトの表示が遅いので、いくつかツールを使ってチューニングすることにしました。 まず初めに

記事を読む

no image

WEBは入り口

スクール革命っていう、日曜の昼に放送してる番組見てたら、「近いうちに夢を録画できるようになる

記事を読む

facebook logo

facebookでログイン機能を作成してみた

最近の会員サイトには、facebookでログインする、という機能がよくついてます。 この機能が

記事を読む

CakePHP  the rapid development php framework  Home

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

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

記事を読む

no image

wordpressからbloggerに引越し

lolipopで使っているロリポプランは、DBが一つしか使用できない。もうちょっと有効に使えないかと

記事を読む

no image

lolipop(ロリポップ)でTinyTinyRSSを導入

Google reader終了のお知らせは、以前ほど使わなくなったサービスとは言え、かなり自

記事を読む

no image

開発の現場に行って来た

ひょんな事から、他社の開発の現場に行く事に。 念願だったT社に!書類選考で落ちたよT社! 久

記事を読む

ユーザー サマリー - Google Analytics

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

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

記事を読む

no image

ec-cubeで欲しい機能

仕事で、ec-cubeを触っている。どこの企業でも同じだと思うが、ec-cubeを使っているとカスタ

記事を読む

no image

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

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

記事を読む

Google AD

Google AD

Slurpy.. #iphone #iphone6 #apple #jakarta #indonesia #instastyle #gadget #ios #gold
iPhone6が来ました。アップルのサポートは未だ健在だったというお話。

アップルは製品だけじゃなくて、サポートの対応にまでその企業哲学

@APPLE introduces the iPhone 6 & iPhone 6 Plus see the short film now on http://bit.ly/1qO17By #gadgets #tlselitedotcom #thelifestyleelite #thelifestyleelitedotcom #lifestyleelite #iphone6
iphone6にするか、iphone6plusにするか、まだ決めなくてもいい方法

iphone6が発表されましたね。iwatchは来年に持越しで

child
パパも2歳になったよ

早いもので子供が2歳になりました。 年を取るごとに年月が早く

The #Liberal #Democrat Avengers! The New Female Thor, African American Captain America (The former Falcon) & Steve Jobs iOS Iron Man! Lol
転職して新しい職場で仕事始めました

1か月以上もブログを放置してましたが、私は元気です。 むしろ

career change
6月末で現職を退職します

ご存知の方もいらっしゃると思いますが、6月末で現職を退職するこ

→もっと見る

PAGE TOP ↑