Twitterでサービスにログイン -PHP(CakePHP1.3)で実践編-

公開日: : CakePHP, IT, PHP, Twitter


以前、ソーシャルログインについて書きました。
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からユーザー登録をさせるより、ソーシャルログインをさせるほうが楽で良いでしょうね。

広告

関連記事

mixisample

iPhoneアプリ開発 -mixiSDKを使ってmixi連携をしてみる(1)-

* やりたいこと iPhoneアプリでmixiと連携し、mixiボイスなどに文字を投稿する。 ※

記事を読む

no image

CakePHP1.3でテストコード(2) -フィクスチャをいじってみる(テストデータの動的登録)-

cakePHP1.3でのSimpleTestを使ったテストケースの第2回目。 今回は、動的にテストデ

記事を読む

no image

iPhoneアプリ開発 -スライドアウトするスプラッシュ画像-

* やりたいこと アプリを起動すると表示される画像(スプラッシュ画像)があります。 単に表示されるだ

記事を読む

no image

Capistranoで簡単デプロイ -開発用サーバー編-

cakePHPを使って開発しているサービス()で、リリース周りを楽にしたいなと思いCapistran

記事を読む

no image

WordPressプラグイン「SyntaxHighlighter Evolved」が動かない!?

* 起きたこと ある時から、本ブログのコードの部分が「SyntaxHighlighter」で表示され

記事を読む

no image

iPhoneアプリ開発 -UIButtonのTouch Down、Touch up Inside、Touch up Outsideの使い方-

* Touch DownとTouch up Inside、Touch up Outsideの違い

記事を読む

no image

TestLink1.91のバグの修正方法

どうやらTestLink1.91にはバグがあるようなので、修正方法を以下に記述。 Test

記事を読む

no image

CakePHP1.3でテストコード(3) -ENUM型が使えない-

cakePHP1.3でのSimpleTestを使ったテストケースの第3回目。 今回は、テーブル構成で

記事を読む

no image

iPhoneアプリ開発 芳名帳アプリ作成(6) -写真に保存-

* 今までの流れ - -[http://pplace.jp/2013/06/1531/:title=

記事を読む

no image

FacebookページをFacebookアプリで表示 -iPhoneアプリ編-

* やりたいこと Facebookアプリを入れている人には、アプリでFacebookページで表示。

記事を読む

広告

Comment

  1. […] PPl@ce » Twitterでサービスにログイン -PHP(CakePHP1.3)で実践編- のコメントのフィード […]

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

広告

no image
[感想] Effective Objective-C 2.0 ☆☆☆☆★(4.5)

* 構成 - 第1章 Objective-Cに慣れる -

no image
[感想] iOSアプリテスト自動化入門 ☆☆☆(3.0)

* 構成 - Chapter 1 テスト自動化への取り組み

DeployGateを試してみた(iOS編) -DeployGateがiOSに対応-

今までのDeployGate - -[http://pplace.

iPhone/iPadアプリを開発するためにやったこと

今までに、iPhoneを3本ほどリリース((リリースしたアプリは全て1

no image
ターミナルでgitのコマンドを補完したりブランチ名を表示する – macでgitを便利に使うために –

* やりたいこと macのターミナルでgitをいじっていると -今の

→もっと見る

PAGE TOP ↑