環境
Windows + XAMPP + ローカルのCakePHPを使ったサイトhttp://localhost/unityroom2/
でアクセスできるサイトを構築中
※unityroom2はサイト名なので適当に読み替えてください。
ローカル的には
C:\xampp\htdocs\unityroom2\app
C:\xampp\htdocs\unityroom2\lib
C:\xampp\htdocs\unityroom2\...
とCakePHPのフォルダが並んでるイメージ
やりたいこと
Twitterを使ったユーザー認証をしたい!ただそれだけ。
ソーシャル認証に特化したOpAuthというものがあったのでそれを使おうとしてました。
https://github.com/uzyn/cakephp-opauth
やったこと
CakePHPのインストール
http://cakephp.jp/ここから安定版ダウンロードして
C:\xampp\htdocs\unityroom2\
以下に配置
その他もろもろ初期設定
saltの設定とかデータベースの設定とか
DebugKitの導入とか
細々したのを終わらせて下記画面がでるところまでやった
CakePHP-OpAuthの導入
OpAuth自体はCakePHPに限定されずいろんなフレームワークで使えるみたい。それをCakePHPで使えるようにしてくれるプラグインをまずは入れる。
ここからダウンロード
https://github.com/uzyn/cakephp-opauth
解凍して出てきたものを
C:\xampp\htdocs\unityroom2\app\Plugin\Opauth
に突っ込む。(Opauthフォルダは作る)
OpAuthの導入
ここからダウンロード(Download->Opauth core only)http://opauth.org/
解凍して出てきたものを
C:\xampp\htdocs\unityroom2\app\Plugin\Opauth\Vendor\Opauth
に突っ込む
TwitterStrategyの導入
ここからダウンロードhttps://github.com/opauth/twitter
解凍して出てきたものを
C:\xampp\htdocs\unityroom2\app\Plugin\Opauth\Strategy\Twitter
に突っ込む(Twitterフォルダは作る)
CakePHP-OpAuthの設定
C:\xampp\htdocs\unityroom2\app\Config\bootstrap.phpに下記を追記
CakePlugin::load('Opauth', array('routes' => true, 'bootstrap' => true)); Configure::write('Opauth.Strategy.Twitter', array( 'key' => '**********API key***********', 'secret' => '**************API secret************' ));KeyはTwitterDeveloperからこぴぺ。
認証後のデータを受け取るコントローラを作成
C:\xampp\htdocs\unityroom2\app\ControllerにUsersController.phpを作成
<?php class UsersController extends AppController { function complete() { pr($this->request->data); $this->autoRender = false; } }
認証後に上記コントローラへ飛ぶように設定
C:\xampp\htdocs\unityroom2\app\Config\routes.phpに下記を追加
Router::connect( '/opauth-complete/*', array('controller' => 'users', 'action' => 'complete') );
ここまでで一度実行
http://localhost/unityroom2/auth/twitterにアクセス
すると下記エラー。
これはググるといろんなところに書かれているが、
Cakeをルートじゃなく1階層下に入れているから。
C:\xampp\htdocs\unityroom2\app\Config\bootstrap.php
に下記行を追加するとこのエラーは消える
Configure::write('Opauth.path', '/unityroom2/auth/');
再度実行するとTwitterの認証画面が出る
認証&エラー
こいつ!こいつが消せなくてめっちゃ困ってた。
対応
エラーでぐぐるとこれが出てくるhttps://github.com/uzyn/cakephp-opauth/issues/21
その中に
I found the issue: I was specifying the route after callingなんて記述を見つけたので先ほど書いたRouter::connectを移動してみた。CakePlugin::routes();
in myroutes.php
file
もう一度下記にアクセス
http://localhost/unityroom2/auth/twitter
あれ。。。さっきはこれでも同じエラー出てたんだけど
今ブログ書くために最初からやり直してたらこれで直った・・・
さっきは
C:\xampp\htdocs\unityroom2\app\Plugin\Opauth\Controller\OpauthAppController.php
の114行目を下記のように書き換えて対応してました。
// $CakeRequest = new CakeRequest('/opauth-complete'); $CakeRequest = new CakeRequest('/users/complete');
動いた画面。
以下ずらずらとTwitterからの情報が並びます。
URLはhttp://localhost/unityroom2/auth/callbackだけど
動作的にはちゃんとUsersController呼ばれてるみたい。
よくわからんけど解決。
疑問
疑問1
Twitter Developersのアプリケーション設定WebSiteやCallbackURLは何入れても何も変わらなかった。
URLっぽいのが入ってればなんでもいいのか?