CakePHPでFacebook-PHP-SDKを使ってFacebookログインするアプリの作り方
こんにちは!
昨日は東京では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
関連記事
-
【今さら】ブラインドタッチができるようになるまでにやった3つの事【もういいでしょ】
過去、仕事で一緒になった人がブラインドタッチが苦手だということがありました。 両手の人差し
-
開発の現場に行って来た
ひょんな事から、他社の開発の現場に行く事に。 念願だったT社に!書類選考で落ちたよT社! 久
-
WordPressをインストールしたら最初にやってることまとめ
仕事でWordpress使ってるけど、とりあえずすごく役に立ちました。ありがとうございます。個人的に
-
windows7のxamppでvirtual hostを設定する
忘れないように忘れてもいいようにエントリー。 タイトルの通りです。 c:/xampp/a
-
WordPress plugin cooperate to EC-CUBE
downloadhttp://code.google.com/p/now-on-sell/it co
-
アマゾンのクラウド(AWS)を使ってみる
前々からやろうやろうと思っていて手を着けられていなかったサービス、アマゾンウェブサービス(AWS
-
lolipop(ロリポップ)でTinyTinyRSSを導入 その2
前回、ロリポップでTiny Tiny RSSを導入しましたが、今回は導入したシステムに、Go
-
AmazonEC2にcakephp2入れたときにエラーが出た件
たぶんEC2にはcakephpをこれからも入れるだろうから自分用にエントリー。 Amazon
-
PHP:GDでテキストの画像合成アプリ作った
前回のNO MUSIC, NO LIFE.メーカーに続き、テキストを入力して画像化するアプリ
-
cakephpでPHPのタイムゾーン設定してないとエラーが出る件
ロリポップからさくらにサーバを変えたのは先日のエントリーの通りですが、サーバ環境が違うことでca
Comment
記事ありがとうございます。
記事通りに記述したものを作成したのですが、以下のようなメッセージがでてきてしまいます。
解決方法ありましたら教授ください
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’
));
}
}
もとさん
コメントありがとうございます。自分でももう一回やってみたところ、エラーが出てしまいました。。(もとさんのものとは違うエラーでした)
ちなみに「Error: Call to a member function read() on a non-object」は、メソッドをオブジェクトでないところで使用したときに出るエラーです。
ちょっとあとで調べて、いつかもう一度まとめなおします。
ソースコードのほうはタグの関係で記載できないので、こちらのいのうぇさんのサイトを参照していただければと・・。
cakephp Facebook認証
お願いします。助かります