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
関連記事
-
ワードプレスのプラグイン初作成
タイトルのとおり。ワードプレスのプラグインを作ってみました。仕事でEC-CUBE使って販売をしている
-
xamppでSSLの設定をする
以前、xamppでvirtual host の設定をしましたが、xamppを使ってて「あれ、SS
-
postgresqlデータベースにインデックスを作成する方法
ビットコインが取引停止になったり、LINEがスタンプを自由に作れるようにしたり、何かとにぎや
-
Blogger Syntax Highlighter
今さらですが、Blogger移転を機にSyntax Highlighterを入れてみました。こちらの
-
moodleをインストールしてみた
Eラーニングの話題が上がったので、調査のためMoodleをインストールしてみました。 1.
-
cakephpでviewからログイン判定してアカウント表示する機能
cakephpのログイン機能を、viewから判定させたかったので調べてみました。 よく
-
【今さら】ブラインドタッチができるようになるまでにやった3つの事【もういいでしょ】
過去、仕事で一緒になった人がブラインドタッチが苦手だということがありました。 両手の人差し
-
【体験談】6年間禁煙を続けられた自分の、禁煙の始め方
4月1日から消費税が8%になり、日用品への影響が少しずつ出てきているころです。 自分はお酒
-
「おっ」思ったWEBデザイン
ちょっと調べることがあったのでメモ。■株式会社テトラシーンhttp://www.tetratone.
-
ブログでアクセス増やすためにはやっぱりタイトルと記事が重要らしい件
最近はアクセス数にも気をつけてるので、ブログのアクセスを増やす方法が書かれた記事が気になりま
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認証
お願いします。助かります