*

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

関連記事

no image

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

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

記事を読む

no image

windows7のxamppでvirtual hostを設定する

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

記事を読む

cakephp

cakephpでPHPのタイムゾーン設定してないとエラーが出る件

ロリポップからさくらにサーバを変えたのは先日のエントリーの通りですが、サーバ環境が違うことで

記事を読む

no image

ワードプレスのプラグイン初作成

タイトルのとおり。ワードプレスのプラグインを作ってみました。仕事でEC-CUBE使って販売をしている

記事を読む

キーボード

【今さら】ブラインドタッチができるようになるまでにやった3つの事【もういいでしょ】

過去、仕事で一緒になった人がブラインドタッチが苦手だということがありました。 両手の人差し

記事を読む

no image

moodleをインストールしてみた

Eラーニングの話題が上がったので、調査のためMoodleをインストールしてみました。 1.

記事を読む

no image

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

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

記事を読む

no image

JQueryのsliderでpagination機能を作ってみた

複数ページが存在するWEBサイトによく使われている機能として「ページネーション」があります。

記事を読む

no image

WordPress plugin cooperate to EC-CUBE

downloadhttp://code.google.com/p/now-on-sell/it co

記事を読む

GoogleAnalyticsページビュー

【なぜ?!】ブログの直帰率が激減しました【GoogleAnalytics】

少し前から気づいていましたが、このブログの直帰率が激減しました。 まずはこちらの図表からどうぞ。

記事を読む

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 ↑