ラボ神部です。
mixi の Open ID 対応で Web サービスの潜在利用者数を増加させられるか? (ラボブログ)というエントリを踏まえまして、ちょっと CakePHP で mixi OpenID に対応したサイトをつくってみようと思いますので、その作るまでのプロセスをライブ更新します。
-サイトのコンセプト決め、ドメイン名設定完了。
-CakePHP をインストール完了。
-デーベース定義決定、定義に従いデーターベース設定完了。
-【CakePHP】AuthComponentについてのまとめ 【ざっくり基本編】 | ねねとまつの小部屋 を参考に、認証の基本環境を整える。
-ユーザ登録し、各ページで $this->Auth->isAuthorized() で認証が引き継がれているか確認。
-【CakePHP】OpenIDをAuthComponentにトッピングしてみる | ねねとまつの小部屋 を参考に、OpenID component for CakePHP を導入したり、PHP OpenID Libraryを設置したり。ただし、ここの追加箇所の意味は十分に理解出来ているとはいえないので、じっくりコードを追いたい。
-次は mixi Developer Center » mixi OpenID を見ながらの作業というところだが、ここでいったん OpenID そのものの勉強に入る必要がありそう。
-yahoo.co.jp、mixi.jp をログインフォームに入れ、OpenIDでの認証が出来ることを確認。
(8/21)今日はここまで。
-何故か Auth コンポーネントへのログインができない状態に。DB 定義を見直して、flag フィールドを追加したらうまくいった。
さて、これで CakePHP で OpenID での環境が整い、自動的に mixi Open ID にも対応することが出来た。
このやり方では、OpenID 経由で認証に来たユーザのユーザ情報も、手元のデータベースに新規ユーザとして登録される(username にあたるところに OpenID の認証 URL が入る。例えば https://id.mixi.jp/70152 みたいな。次回以降ログインする場合には、きっとこの文字列が username として参照されるのだろう)。ここまでは「ねねとまつの小部屋」さんの情報がすばらしくわかりやすいこともあり、非常にたやすかった。時間があれば一日で設定完了出来るはず。
ここから先は実際の運用を考えてみよう。まず、OpenID 経由で新しく登録されたユーザのサイト内の導線についてじっくり考えてみる必要がある。また、OpenID経由で来たときに、本来は元のサイトでログインしていれば再度ログインしなくていいことが望まれる。でなければ、ブラウザにID/パスワードが保存される昨今、ログインのしなおしが入ることはそれぞれのサイトに別々の ID を登録することとほとんど変わらないからだ。
mixi のように元のサイトの関係性を引っ張ってこれるなら、そこを生かす方法も知らなければならない。なんとなく、PHP OpenID Library か OpenID component for CakePHPがやってくれそうなので、次はそのあたりを調べることになるかな。いっそ OpenID 経由の認証専用のサイトにするとか、mixi OpenID 専用サイトにするぐらい、極端なことをやってもいいのかもしれない。
(8/22)今日はここまで。
ユーザ情報とは別のユーザデータ格納用テーブルを作成し、それの取り回し用のインターフェース部分を作る(正直このあたりの単純作業は楽しくない・・・)。テーブル二つを取り回すのは結構大変かと思ったが、CakePHP の十徳ナイフ並みの柔軟さに助けられ、まあなんとか形になる。
あとは細かいところメッセージやセキュリティチェック、UIを整える作業だけど・・・このへんはなかなかモチベーションが出てこないところ。このあたり好きな人と組めればいいのだけど。
さてここでまたちょっと悩みどころ。mix OpenID に対応するつもりが、Open ID なら全部対応したサイトになってしまいました。しかし、mixi ID でログインさせたときと Yahoo! ID でログインさせたときは、ユーザの新規登録が個別に行われるため、別々の ID になってしまい、Open ID を使っていながらユーザが複数アカウントを持つことになり、サービスのコンセプトが良くわからなくなってしまいます。そこで、ちょっと後進的ですがまずは mixi Open ID のみを対象にし、他の Open ID は非対応という扱いにして、サービスをシンプルにしてみようかな、と考えています。
ってことでものすごい最低限のデザイン完了。少しやる気出た。
(8/25)今日はここまで。
mixi Developer Center » FAQ のドキュメントに従い、マイミク認証に対応させてみた。URL を直接指定することで、入力欄に ID を入力済みにさせることも出来るかな?
機能的な所は今度こそ完了。あとはユーザの取り回しやデザインをがんばろう。
(8/26)今日はここまで。
さて、mixi からの OpenID によるログインが出来る用になった。しかし今回はせっかく mixi OpenID の機能により、マイミクとの認証やコミュニティのメンバーであるかどうかの認証(権限確認?)が出来るわけだから、そこに対応させていきたい。
が、ふとここで OpenID の仕様についての見識のなさを思い知る。要は認証が通ったということを取得したいわけだが、どの値をもって成功したととればいいのか、全然勘所がわからないわけで。
ということで、もう一度情報収集をやりなおし。今回はマイミク認証でやろうと思うので、速報、1500万人が使える mixi OpenID の技術面を解説するでござるの巻 - Yet Another Hackadelic などを大変参考にさせていただきながら、var_dump で試行錯誤。それなりに自分流のロジックを作りながら、マイミクであると認証が通ったときのみ、マイミクのコンテンツが閲覧できるようなものをなんとか作れそうなところの第一歩まではたどり着けた。DB定義も何度かみなおしたし、これでこんどこそあとは単純作業にできるはず。続きは来週。
(8/29)今日はここまで。
だいぶ間が空きましたが、 サービスがようやく完成。やっぱりキモはマイミク認証の活用したかったので、マイミク認証の戻り値で自分と相手のペアの mixi ID を毎回取得することで解決した。複数マイミクシィ認証 - ラーニング人生。 なんて方法もあるようだけど、これはまた今度かな。
完成したサービスは「Ckr!(ちぇけら!)」というものです。こちらの解説エントリをご覧ください。
(10/2 完)
関連記事


