しかし、OpenID Enabled にある JanRain のライブラリを使うとYahoo ID でログインしようとした時に画面が真っ白になり処理が途中で停止してしまう問題に直面した。
今時 OpenID 対応サービスを始めるなら間違いなく Yahoo ID は外せない存在になると思うので応急処置を施してみた。
原因はどうも XML に関連した処理の途中(libxml)でエラーを起こしていることらしく、ググるだけで問題箇所を特定できたためそれを回避するコードを書いた。
問題となっているのは DOMXPath->query の呼び出しで、まず grep してこの関数を呼び出している場所を探した。
すると Auth/Yadis/XML.php 内の Auth_Yadis_dom->evalXPath でしか使われていないらしいので、Auth_Yadis_dom->evalXPath を呼び出しているコードを grep してどんな引数で呼び出されるのか調べ、それを元に今回の問題を回避できるような最低限のコードを書いた。
http://oovch.net/XML_php_modified.phps
XPath自体よく把握してないので結構勘で書いてます。
取り合えず v2.0.1 の XML.php をこれに差し替えれば動くようにはなったので、XREAやCORESERVERのlibxmlがバージョンアップされるなどでオフィシャルの対応がされるまでの間はこのコードで無理やり動かすことが出来そう。
ライブラリ側は xrd:XRD を要求してきて、Yahoo から渡された XML は名前空間なしのただの XRD だったりしていたので、取り合えず名前空間なしでも探すようなコードにしておいた。
アホみたいに長い OpenID 用の URL でも、ただ単に yahoo.co.jp でもちゃんと認証できるようです。
早速入れ替えてみたところ、見事成功しました。ありがとうございます。
こちらの XML.php のライセンスは、何になるのでしょうか、再配布したのですが問題ないでしょうか。
ライセンスについては考えていませんでしたが、
特に利用を制限する理由はありませんのでBSDライセンスということでお願いします。
前言の「再配布したのですが」は 「再配布したいのですが」の間違いでした。(「い」が抜けただけで恐ろしく意味が違う・・・) :-P
BSDライセンスということ、ありがとうございます。
チーム内で Go! が出次第、適用させて頂きます。 :-D