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
関連記事
-
wordpressのパーマリンク設定を変更してみたら大丈夫だった件
wordpressでパーマリンクを変えようと思ってたんですが、なかなか踏み切るタイミングがな
-
facebook for PHP SDKを使ってCakePHPでログアウトとポストする方法
ソチオリンピックではスノーボード・ハーフパイプで平野さん・平岡さんが初のメダル獲得をしました
-
ブログでアクセス増やすためにはやっぱりタイトルと記事が重要らしい件
最近はアクセス数にも気をつけてるので、ブログのアクセスを増やす方法が書かれた記事が気になりま
-
アマゾンのクラウド(AWS)を使ってみる
前々からやろうやろうと思っていて手を着けられていなかったサービス、アマゾンウェブサービス(AWS
-
vertical-alignで画像とテキストの位置を垂直方向で揃える
これも自分のリマインダー用としてエントリー。 画像とテキストが同じ行に並んでいて、垂直
-
cakephpでユーザ定義定数を読みだす方法
サイトを作るにあたって、定数を使いたいときがよくあります。 サイト上のある数値に変更があっ
-
WordPress plugin cooperate to EC-CUBE
downloadhttp://code.google.com/p/now-on-sell/it co
-
【どうしてこうなった!?】このブログの直帰率が1%を切りました【自分史上初】
以前のエントリーで、このブログの直帰率が80%から20%に激減したことを報告しました。
-
cakephpでPHPのタイムゾーン設定してないとエラーが出る件
ロリポップからさくらにサーバを変えたのは先日のエントリーの通りですが、サーバ環境が違うことでca
-
WEBディレクター募集します
仕事でWEBディレクターが必要になりました。HTML/CSSコーディング、ディレクション経験あります
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認証
お願いします。助かります