うめぼしジョイスティック - ivoice

CakePHP、JavaScript、jQuery等のプログラミングについて書いていきます 思考は、うめぼしのように硬く、そして柔らかく。

CakePHP2.x系でTwitterやFacebook連携認証を可能にするOpauth認証を実装する方法が分かりやすく書かれたブログまとめ

orekaihatsulog.hateblo.jp

これが、一番役に立ったブログです。 やるべきことだけとにかく指示されているので、シンプルで分かりやすいです!!!

Opauthは、FacebookTwitterGoogle、LinkedInなど、様々なSNSのアカウントのどれか1つに ブラウザがログインしていれば、新たにアカウントを作る必要がなくログイン(認証連携)が出来るシステムです。

本家のホームページはこちら。

Opauth – Multi-provider authentication framework for PHP

このような連携認証システムは多くのウェブアプリケーションで採用されています。

有名なものでは、ask.fmなどがありますね。

Twitterと親和性が高いシステムだと、一気にソーシャルで新規ウェブアプリケーションが広まりやすいといった利点があります。

その他、役に立ったブログなど。

CakePHPでOpauthを使ってFacebook認証 | プログラマーは死狂ひなり

これもほぼ同じ手順が書かれています。

僕がハマったところは、ログアウトの状態で、usersコントローラーに

'opauthComplete' を許可していなかったところです。

許可したい場合は、UsersController.phpで、beforeFilter()をつかって

   public function beforeFilter() {
        parent::beforeFilter();//これがないと、親であるAppControllerのbeforeFilter()が実行されない


        $this->Auth->allow(array(
                                'mypage',
                                'login',
                                'logout',
                                'opauthComplete'
                                ));

        $this->Auth->authenticate = array(
        // フォーム認証を利用
            'Form' => array(
            // 認証に利用するモデルの変更
            'userModel' => 'User', //Userモデルを指定
            // 認証に利用するモデルのフィードを変更
            'fields' => array('username' => 'email', 'password' => 'password')
            )
        );



    }


このようにして、'opauthComplete'の実行をログアウトユーザーに開放しましょう。(ACLを既に使っている場合など)

また、

apps.twitter.com

Twitter appの設定で

f:id:ivoice:20150729185714p:plain

この2つの部分で上にチェックをしていたためにうまく動かなかったところもハマりポイントでした。 とりあえず、この2つのチェックは外したままにしておきましょう。

認証が成功すると認証画面に飛び、ユーザーのIDやアカウント名、フォロワー数などが取得できます。 それらのデータを成形して、ログインユーザーとしてアクションを許可する感じになると思います。

とりあえず今回はここまで。

P.S.

CakePHPの公式リファレンスにもOpauthの導入方法が記載されていました。 しかし、英語で、しかもこれはFacebookの場合なので、若干わかりにくいかもしれません。 書いてあることは同じなので、より厳密に確認したい方はこちらも参考にしましょう。

bakery.cakephp.org