RailsのOpenID Authentication PluginをXRI対応にする方法
Railsコアチームが開発しているOpenID Authentication PluginがOpenID 2.0に対応しました。(これで以前のようにPatchを当てる必要もなくなる♪)
ただ、まだOpenId Authentication PluginはXRIでのログインには対応していないようなので、OpenID Authentication PluginをXRIに対応させてみました。
Gemで入るruby-openid 2.0.4は、軽くソースを眺めた感じではXRIにも対応しているようなので、OpenId Authentication Pluginのconsumer.beginにXRIを渡してやればいけるはず!ということで、変更点はnormalize_urlメソッドのみ。
RAILS_ROOT/vendor/plugins/openid_authentication/lib/openid_authentication.rb
のnormarize_urlを編集します。
-
def self.normalize_url(url)
-
+ if url=‾/^(xri:¥/¥/|)[=@][-_.!‾*¥'()a-zA-Z0-9;¥/?:¥@&=+¥$,%#]+$/
-
+ url # XRI
-
+ else
-
uri = URI.parse(url.to_s.strip)
-
uri = URI.parse("http://#{uri}") unless uri.scheme
-
uri.scheme = uri.scheme.downcase # URI should do this
-
uri.normalize.to_s # URI
-
+ end
-
rescue URI::InvalidURIError
-
raise InvalidOpenId.new("#{url} is not an OpenID URL")
-
end
とりあえずこれでXRIでのログイン処理はできるようになりました。
ただXRIの正規表現の部分とかがすごい怪しいので、バグなどあればコメントいただけるとうれしいですm_ _m
ちなみに、「OpenId Authentication Pluginのサンプルにはまった。 » RAILS PRESS」で紹介したバグはまだなおってないので、注意してください。(そういえばこのバグには、satokoさんもはまってたみたい)
OpenID Authentication PluginのOpenID 2.0対応に関する詳しい情報は以下。
- OpenID Authentication Plugin for Rails Now Supports OpenID 2.0
- Changeset 9103 - Updated OpenIdAuthentication to use Ruby OpenID 2.x.x gem
ps.
OpenID勉強会@DrecomでXRIについて勉強した勢いで、今日「=nov」と「@id*nov」を取得してみました。












この記事がお役に立ちましたら、一言コメントもらえると嬉しいですm_ _m