iKnow! の OpenID で XRI をサポート & ruby-openid を日本語 XRI 対応に
昨日 OpenID Foundation Japan で NRI の崎村さんに「iKnow! の OpenID は XRI をサポートしてないですね」ってなことを言われたらしいので、iKnow! の OpenID を XRI に対応させました。
OpenID Authentication Plugin の XRI 対応は RailsのOpenID Authentication PluginをXRI対応にする方法 に書きましたが、OpenID::Yadis::XRI.identifier_scheme というメソッドが既にあったので、今回はそれを使いました。
-
module OpenIdAuthentication
-
# XRI support
-
def self.normalize_url_with_xri(identifier)
-
case OpenID::Yadis::XRI.identifier_scheme(identifier)
-
when :xri : identifier
-
when :uri : normalize_url_without_xri(identifier)
-
end
-
end
-
class <<self
-
alias_method :normalize_url_without_xri, :normalize_url
-
alias_method :normalize_url, :normalize_url_with_xri
-
end
-
end
で、久しぶりに @freexri に行ってみたら、「=名前*nov」とかとれるようになってました。いつのまにか XRI って日本語も使えるようになってるんですね。日本語 XRI は微妙だけど、一応対応しておきました。
ruby-openid が日本語 XRI に対応してなかったので、OpenID::Yadis::XRI.escape_for_iri_with_multibyte をちょっと変更する必要があります。
-
module OpenID::Yadis::XRI
-
def self.escape_for_iri_with_multibyte(xri)
-
esc = escape_for_iri_without_multibyte(xri)
-
esc.gsub!(/([\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})/e) { |char_match|
-
CGI::escape(char_match)
-
}
-
return esc
-
end
-
class <<self
-
alias_method :escape_for_iri_without_multibyte, :escape_for_iri
-
alias_method :escape_for_iri, :escape_for_iri_with_multibyte
-
end
-
end
これで OK なはずですが...











