*

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

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

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

関連記事

no image

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

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

記事を読む

no image

ec-cubeで欲しい機能

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

記事を読む

PVが3000を超えたので3か月やったこととを公表します

ウクライナ情勢が緊迫している昨今、皆様お元気でしょうか? 自分のブログには大きな変化がありました。

記事を読む

no image

zenphotoを考え始める

googleのwebアルバムを使っていて、こりゃ便利じゃわい、と思ってたけど、結局完全に無料じゃない

記事を読む

SVNリポジトリのリプレース(とeclipseの設定)

  SVNリポジトリのリプレースを行ったのでエントリー。 1.リポジトリをdump svn

記事を読む

no image

wordpress plugin change the taxonomy when you suggest the time

1. at first, download Post Expirator.2.change code

記事を読む

xamppでSSLの設定をする

以前、xamppでvirtual host の設定をしましたが、xamppを使ってて「あれ、SS

記事を読む

no image

podcastのテスト

podcast配信です! mp3ダウンロード mp4ダウンロード

記事を読む

no image

PHPのpear インストールにて

今さらながらPEARを触ることに。以前に少しだけ触ったことがあって、「ダウンロードするだけでしょ?超

記事を読む

no image

wordpressからbloggerに引越し

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

記事を読む

Google AD

Google AD

PAGE TOP ↑