Twitterでサービスにログイン -PHP(CakePHP1.3)で実践編-
Twitterでサービスにログイン -ソーシャルログイン- | PPl@ce
ただ、Twitter連携にまだ触れてない人にはちょっとわかりづらい話だったと思うので、今回は実践編。
事前準備
ライブラリをダウンロード
1からコードを書くのは大変なので、ライブラリを利用します。
- 以下のサイトからダウンロード。
- 上記の中から「twitteroauth.php」と「OAuth.php」の2つのみ利用
Twitter developersに登録
- 以下のサイトにTwitterアカウントでログイン
- 「Create an app」をクリック
- 各値を記入
- 以下の値を取得
- 「My applications」の「Details」から「Consumer key」と「Consumer secret」を持っておく
[注意点]
認証後に遷移するURLである「Callback URL」は動的に設定できますが、登録時には何かしらの値を入れておくようにします。
※場合によって、プログラム側からCallback URLを設定してもPINコードの入力画面が表示されるケースがあります。
※単に私がそういう経験をしただけなので、必ずしもなるのではないかもしれませんが念のため。
流れ
実際の流れは以下の様な形になるかと思います。
(1)リクエストトークンをもらう。
(2)認証用URLをつくる。
(3)認証用URLにアクセスする。
- Callback URLへ戻ってくる。
(4)戻ってきたらアクセストークンを取得する。
(5)アクセストークンを元に登録されているユーザーか確認する。
- もし存在しなければ、ユーザー登録をおこなう。
(6)ログインしユーザーページに遷移する。
プログラム例
以下に流れにそって、プログラム例を書いておきます。
※CakePHP1.3を利用していますので、それ以外の場合はApp::importなどCakePHP依存の箇所は別途修正してください。
(1)~(3)まで
vendorsフォルダ配下に、「twitteroauth.php」と「OAuth.php」を置きます。
もちろんフォルダを用意して、そこに上記の2ファイルを置いてもOKです。
その場合は、App:importの値を変更してください。
App::import('Vendor', 'twitteroauth'); class UserController extends AppController { public function index() { $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); $url = 'Callback URLの値'; //(A) $tokenset = $twitter->getRequestToken($url); //→(1)リクエストトークンをもらう。 $_SESSION['request_token'] = $tokenset['oauth_token']; //(B) $_SESSION['request_token_secret'] = $tokenset['oauth_token_secret']; //(B) $url = $twitter->getAuthorizeURL($_SESSION['request_token']); //→(2)認証用URLを作る。 $this->redirect($url); //(C) →(3)認証用URLにアクセスする。 } }
CONSUMER_KEYとCONSUMER_SECRETは事前準備で取得していたものになります。
(A)で戻ってくるURLを指定します。
(B)では後で利用するために、セッションに保存しています。
(C)で認証用URLにリダイレクトさせています。
[注意点]
CakePHPの場合は、セッションが使えるように以下のようにSessionコンポーネントを読み込ませておく必要があります。
var $components = array('Session');
(4)~(6)まで
遷移させた先のプログラム例は以下のとおりです。
今回ですと、/user/social/にしています。
//略 public function social() { $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['request_token'], $_SESSION['request_token_secret']); $receivedTokenset = $twitter->getAccessToken(); //→(4)アクセストークンを取得する。 $userData = array('user_id' => $receivedTokenset['user_id'], 'twitter_screen_name' => $receivedTokenset['screen_name'], 'twitter_access_token' => $receivedTokenset['oauth_token'], 'twitter_access_token_secret' => $receivedTokenset['oauth_token_secret'],); if(is_array($userData)){ //存在するかチェック →(5)ユーザーがいるか確認。 $existUserInfo = $this->user->getByUserID($userData['user_id]'); //存在しない場合は登録 →(5)存在しなければ登録する。 if(!is_array($existUserInfo)){ $this->user->add($userData); } } $url = 'ユーザーページ'; $this->redirect($url); //→(6)ユーザーページに遷移する。 } //略
まず、アクセストークンを取得します。
その値を元に、ユーザーが存在するかどうか確認します。
もし存在しなければ、登録します。
※いきなり登録せずに、登録するかどうかの確認画面がある方がベターだとは思います。
今回の場合は、データベースに「TwitterのID」「スクリーンネーム」「アクセストークン」「アクセストークンシークレット」の4種類を保存しています。
上記のプログラムでは、データが登録されているかの確認用に、「TwitterのID」を利用していますが「アクセストークン」や「アクセストークンシークレット」も併用するほうがベターです。
[注意点]
「アクセストークン」や「アクセストークンシークレット」は暗号化してから保存してください。
認証の際に利用するだけなら不可逆でも構いませんが、もしTwitter APIにリクエストするなら複合可能な暗号化方式を利用します。
まとめ
上記で、Twitterを利用したソーシャルログインができます。
Webサービスで1からユーザー登録をさせるより、ソーシャルログインをさせるほうが楽で良いでしょうね。
広告
関連記事
-
iPhoneアプリ開発 −タッチで線を描く(1)−
* やりたいこと 今回やりたいことは以下の2点。 -(1) 画面をタッチして、指を動かして線を描きた
-
Androidアプリ開発 -9patchで吹き出し画像を作る-
* やりたいこと TextViewで文字を表示させ、背景画像に吹き出し画像を設定した場合。 文字
-
Androidアプリ開発 -ギャラリーから選んだ画像のサムネイルを取得-
* やりたいこと +ボタンをクリックしてギャラリーを表示。 +ギャラリーで画像を選んだら、その画像の
-
MySQLのバックアップ手順 -消えたら困るものはバックアップ-
そろそろデータが消えてもらったら困るぐらいになっていたのでバックアップをとることにしました。 とい
-
ヘルプ作成で思ったWebサービスの3つの心得 -短文の教え-
最近ヘルプを作って思った3つのこと。 * 1文に複数の内容を書かない 1文に複数の内容を書いてい
-
jQueryMobileでカレンダー表示 -DateBoxプラグインの利用-
スマートフォン対応をしているとカレンダーの表示の仕方をスマートフォンらしくしたいことがあると思います
-
iPhoneアプリ開発 −iOS6からの「写真」へのアクセス問題−
写真を扱うアプリを開発している際に問題になったこと。 ※結構前の話を今更まとめてみる。 * 写真へ
-
Jenkins + iPhoneアプリ(番外1) -TestFlightを利用する-
* これまで - -- 執事(Jenkins)を雇いました。 * やりたいこと Jenk
-
CakePHP1.3でテストコード(1) -モデルのテスト-
CakePHP1.3ではSimpleTestを用いてテストコードを書きます。 ※CakePHP2系で
-
Windows環境でもJenkins -執事さんとご対面-
Trac Lightningに同梱されていますし、Windows環境でHudsonを使っている人は結
Comment
[…] PPl@ce » Twitterでサービスにログイン -PHP(CakePHP1.3)で実践編- のコメントのフィード […]