Jan 21st, 2010

encoding error ruby-openid

SinatraでOpenIDでのログインを実装しようとしてハマったので、メモ。
ruby-openid (2.1.7)で確認。

        c = OpenID::Consumer.new(ss, st)  
        begin  
            req = c.begin( openid_identifier )  
            rurl = req.redirect_url( root_url, callbk_url )  
            return rurl  
        rescue  
            raise Error, $!.to_s  
        end

というソースで、openid_identifierにユーザ名が入ってるパターン(livedoorやはてななど)の場合に、次のようなエラーメッセージが出る

incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) 

これはバグらしく、パッチが以下の所にある。
Encoding::CompatibilityError with Ruby 1.9
はてなとLivedoorだけどうやっても接続出来なかったのだけど、このパッチで出来るようになった。