kumaryu日記
2011-03-07
_ 日記
熱出して寝込んでしまった。つってもちょい熱があるくらいで他は元気だったのでふとんでごろごろしてただけだが。有給余ってるしね。
PeerCastStation。インスタンス作成時に待ち受けるアドレスを一つだけ指定していたのをやめて、あとから追加削除できるようにしてやった。しかし複数待ち受けしてもリレーする時には一つしか使わないのであんまり役に立たないかも…?アクセス制限つけてないのはまずいけどどうしよっかなー。またあとでいいかなー。
プレイリスト出力も作ってみたけどなんかまだ動いてない。これさえ動けばあとはバグ取りすればα版配布できる状態になりそうなのでさっさとやりたいね。
_ [Ruby] GoogleAppEngine+JRuby+SinatraでOpenID
イベント用サイト作成。アカウント管理を自前で用意するのはめんどいのでGoogleAppEngineの機能でGoogleアカウントでログインできるのを使ってたんだけど、Googleアカウント取得失敗したとかいう人が出てきてしまった*1。まあそんなこともあるかもとは思ってたけど実際出てきてしまったのでなにか考えないと。
自前で簡単なアカウント管理を作るのとOpenIDでのログインに対応するのどっちが早いか考えてOpenIDを試してみることに。
rack-openidってライブラリがあったので使ってみる。これを使うと簡単にログイン試行と結果がとれるのであとはセッションに結果を保存しとくだけ。GAEのアカウント管理サービスはセッション管理まで自動でやってくれるんだがそこまでのものはないか。
とりあえず出来たのでローカルで動かしてOpenID.ne.jpでログインしてみたら上手く動いた。やたー。
じゃあYahoo! JAPAN辺りも…と思ったら上手くいかんなぁ。戻ってきたステータスを表示すると:missing。意味はよくわからんが接続先がみつからん的なエラーらしい。yahoo.co.jpはあるだろうよ…。
rack-openidのソース見たら通信失敗した時は例外を握り潰して:missingを返すようになってた。おいおい、握り潰すならせめてコンソールに出力でもしてからにしてくれよ…。例外の中身見たらOpenSSL::SSLが無いとか。あ、サーバ起動時に必要ならjruby-opensslを入れろとか出力されてるな。
jruby-opensslを入れてみるがまだエラーが出てる。さらに調べようとしたその時、重要なヒントがもたらされた。「GAEって独自にソケット通信できんの?」……あ。
そういやURLフェッチなんつー機能があってつまりそれでしか通信できないんでしたっけー?って調べたらやっぱりそうだ!URLフェッチAPIとメールAPIしか外部への通信手段は無いよってさ!!OpenID実装してもGAEで動かないじゃん!ruby-openidの通信部分をURLフェッチにのせかえるとかさすがにやってらんねーし。
諦めようとしたら最近のSDKでOpenID対応したって教えてもらった。いやOAuthじゃね、それは違うんじゃね、って調べたらアカウント管理にGoogleアカウントのみかOpenID使用か選べるようになってんじゃねーかよ!先にこれを知っておけば!!
使い方は簡単で、アプリの設定画面でログイン方法をFederatedログインとかいうのに変更する。Users.create_login_urlの引数4つ版が追加されてるので3つ目にOpenIDのidentifyを渡す*2。あとは従来のGoogleアカウント使う版と同じ。ということでcreate_login_url以外は変更無しでいけたわ。しかもログイン情報のセッション管理は勝手にやってくれるのでその辺を気にしなくてよくて楽。
OpenID 1.1に対応するとID入力フォームが必要でめんどいのでOpenID 2.0対応してるところをとりあえずログインボタンぺたぺた貼って完了。Yahoo! JAPAN、livedoor、mixi、excite、BIGLOBE…とGoogleか。俺Google以外アカウント持ってないけど、まあこれだけあればどれかしらひっかかるだろうし、持ってなくてもどれかは新規取得できるだろう。
Google以外は試してないので不安だったけど、ちゃんといけたと報告もらえたので良かった。
GAEは独自のAPIが便利だけどそこから外れた物はほぼ使えないのが難しいね。巷で使われてるライブラリがGAEのAPIに対応してない場合もあるし。appengine-jrubyも完璧ではないからな。
appengine-jrubyといえば、動かそうとしたらなにやらエラーが出て起動しなくなったんだった。調べたらjruby-rackのバージョンを1.0.5に固定しとかないとダメとか。1.0.4じゃないとダメだったとか情報も錯綜していたが1.0.5でいけたわ。一回動いたらGemfileはちゃんとバージョン指定で書いといたほうがいいかもね。