*

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

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

関連記事

no image

NO MUSIC,NO LIFE.メーカー作ってみた

以前から、画像を使ったアプリを作ってみたいと思い、GDを使ったアプリを作ってみました。 N

記事を読む

no image

「おっ」と思った記事

前回に引き続き、「おっ」と思ったサイトを紹介します。今回はデザインうんぬんでなく、コンテンツの方で。

記事を読む

あらら?Googleのストレージサービスで、無料なのに有料プランが使えてる?!

  「ストレージサービス」をご存知でしょうか。「サーバーのディスクスペースを

記事を読む

no image

WordPressをインストールしたら最初にやってることまとめ

仕事でWordpress使ってるけど、とりあえずすごく役に立ちました。ありがとうございます。個人的に

記事を読む

WordPressのテーマを「stinger」に変えたよ

しばらくぶりにブログ(Wordpress)のテーマを変更しました。 以前はオールホワイトで

記事を読む

no image

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

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

記事を読む

img vertical-align

vertical-alignで画像とテキストの位置を垂直方向で揃える

これも自分のリマインダー用としてエントリー。 画像とテキストが同じ行に並んでいて、垂直

記事を読む

cakephp

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

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

記事を読む

no image

オブジェクトとクラスについて

基本的なところをちょっと復習。 下記あたりが参考になったのでメモ。 http://www.k

記事を読む

facebook for PHP SDKを使ってCakePHPでログアウトとポストする方法

ソチオリンピックではスノーボード・ハーフパイプで平野さん・平岡さんが初のメダル獲得をしました

記事を読む

Google AD

Google AD

no image
ビジネスを自動化する!仕組みづくり

収益化のルール https://www.youtube.co

セールススキルの大切さ

今日はセールススキルって大事って話だよ。 ・営業とりあえずやっ

テレワーク・在宅勤務に最適な間取りプランとは?

家の中で集中力をアップさせるには? 人間はそもそ

克己
田中克成さんの実父「プロ精神八か条」とは

今日も田中克成さんのメルマガからのシェア+アウトプットです。

イメージ
心に突き刺さる起業家の言葉「お前は何がしたい?」

こんにちは。起業家のマインドで感銘を受けた動画の、シェアとアウトプッ

→もっと見る