5

我对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 未定义。

你们有没有人遇到过这种情况?不太清楚是什么原因。

我正在运行的版本:

  • 红宝石 1.9.3dev (2010-08-17 主干 29020) [x86_64-darwin10.4.0]
  • 红宝石-openid (2.1.8)
  • ruby-openid-apps-discovery (1.2.0)
  • 全域认证 0.2.0
4

2 回答 2

7

我们遇到了同样的问题,这是 Net::HTTP#connect 从未被调用的直接结果。事实证明,我们将 fakeweb gem 限定在引发错误的环境中(在我们的例子中是开发)。

缩小 fakeweb 的范围允许正常处理 #connect 和 @socket 再次感到高兴。

group :test do
  gem 'fakeweb'
end
于 2011-04-05T14:06:23.990 回答
1

我们遇到了fakewebwebmock(使用VCR gem 时)相同/非常相似的问题。从 切换fakewebtyphoeus似乎已经为我们解决了这个问题。

于 2013-01-10T16:45:41.233 回答