ruby-openid: @socket не установлен при выполнении обнаружения
У меня есть немного проблемы с omniauth/openid.
При попытке аутентификации я нашел это в своих журналах:
OpenID::FetchingError: Error fetching https://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username: undefined method `io' for nil:NilClass
Важная вещь есть undefined method io' for nil:NilClass
который идет от openid/fetchers.rb, в следующем фрагменте:
module Net
class HTTP
def post_connection_check(hostname)
check_common_name = true
cert = @socket.io.peer_cert
cert.extensions.each { |ext|
next if ext.oid != "subjectAltName"
ext.value.split(/,\s+/).each{ |general_name|
if /\ADNS:(.*)/ =~ general_name
check_common_name = false
...
Эта ошибка генерируется @socket.io.peer_cert
@socket не определен.
Кто-нибудь из вас сталкивался с этим раньше? Не совсем уверен, в чем причина.
Версии у меня запущены:
- ruby 1.9.3dev (2010-08-17 trunk 29020) [x86_64-darwin10.4.0]
- ruby-openid (2.1.8)
- ruby-openid-apps-discovery (1.2.0)
- omniauth 0.2.0
2 ответа
У нас была такая же проблема, и это было прямым результатом того, что Net::HTTP#connect никогда не вызывался. Оказывается, что у нас был fakeweb gem, находящийся в среде, которая выдавала ошибку (в нашем случае, разработка).
Сужение области действия fakeweb обеспечивает нормальную обработку #connect, и @socket снова радует.
group :test do
gem 'fakeweb'
end
Мы столкнулись с одной и той же / очень похожей проблемой с обоими fakeweb
а также webmock
(при использовании драгоценного камня видеомагнитофона). Переключение с fakeweb
в typhoeus
казалось, решил эту проблему для нас.