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

広告

関連記事

no image

iPhoneアプリ開発 -利用するべきサービス-

iPhone(iOS)アプリ開発において使っているサービスを列挙。 この手のサービスがないと、開発中

記事を読む

no image

はてなスターのアイコンを日本酒アイコンにしてみた

日本酒大好きです。 というわけで、はてなスターを日本酒アイコンにしてみました。 その流れ

記事を読む

iPhoneアプリ開発 芳名帳アプリ作成(5) -ペンサイズと入力エリア数の設定-

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

記事を読む

iPhoneアプリ開発 -UIScrollViewでタッチを取得-

* やりたいこと UIScrollViewでタッチを取得する。 * 方法 通常のUIScrollV

記事を読む

no image

CAPTCHAの導入方法 -KCAPTCHAの導入-

CakePHP(1.2、1.3)にKCAPTCHAを導入してみたのでメモ。 * CAPTCHA

記事を読む

no image

iPhoneアプリ開発 −複数前の画面に戻る−

* やりたいこと ある画面から別の画面に遷移したい。 -1つ前の画面に戻りたい。 -2つ前の画面に戻

記事を読む

no image

iPhoneアプリ開発 -iOS6から変わったこと-

Deployment Targetを5.1にしていた時には気がつかなかったのですが、iOS6になって

記事を読む

no image

jQuery Mobileのバージョンアップではまった – pushStateの存在 –

jQuery Mobileをつかってスマートフォン対応をしたときにはまったこと。 * 前提

記事を読む

Jenkins + iPhoneアプリ(3) -ipaファイルをTestFlightにアップロード-

* これまで - -[http://pplace.jp/2013/01/1192/:title=

記事を読む

jenkins-files

Windows環境でもJenkins -執事さんとご対面-

Trac Lightningに同梱されていますし、Windows環境でHudsonを使っている人は結

記事を読む

広告

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 ↑