Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Google Oauth SSL错误-SSL\u connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败_Ruby On Rails_Oauth_Google Api_Google Api Client_Google Api Ruby Client - Fatal编程技术网

Ruby on rails Google Oauth SSL错误-SSL\u connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败

Ruby on rails Google Oauth SSL错误-SSL\u connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败,ruby-on-rails,oauth,google-api,google-api-client,google-api-ruby-client,Ruby On Rails,Oauth,Google Api,Google Api Client,Google Api Ruby Client,我正在开发具有社会授权的rails应用程序。Facebook和Twitter的登录很好,但谷歌出现了一些奇怪的情况 我的谷歌初始值设定项: provider :google_oauth2, OAUTH_CONFIG[:google_api_key], OAUTH_CONFIG[:google_api_secret], { :access_type => 'offline', :prompt => 'consent', :scope => 'useri

我正在开发具有社会授权的rails应用程序。Facebook和Twitter的登录很好,但谷歌出现了一些奇怪的情况

我的谷歌初始值设定项:

  provider :google_oauth2, OAUTH_CONFIG[:google_api_key], OAUTH_CONFIG[:google_api_secret], {
    :access_type => 'offline',
    :prompt => 'consent',
    :scope => 'userinfo.email, userinfo.profile, youtube.readonly'
  }
我的错误,我在单击“使用谷歌登录”时看到:

Faraday::Error::ConnectionFailed
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:920:in `connect'
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:920:in `block in connect'
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/timeout.rb:76:in `timeout'
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:920:in `connect'
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:863:in `do_start'
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:852:in `start'
/Users/bmalets/.rvm/rubies/ruby-2.1.4/lib/ruby/2.1.0/net/http.rb:1369:in `request'
faraday (0.8.8) lib/faraday/adapter/net_http.rb:75:in `perform_request'
faraday (0.8.8) lib/faraday/adapter/net_http.rb:38:in `call'
faraday (0.8.8) lib/faraday/request/url_encoded.rb:14:in `call'
faraday (0.8.8) lib/faraday/connection.rb:253:in `run_request'
oauth2 (0.8.1) lib/oauth2/client.rb:88:in `request'
oauth2 (0.8.1) lib/oauth2/client.rb:131:in `get_token'
oauth2 (0.8.1) lib/oauth2/strategy/auth_code.rb:29:in `get_token'
SSL证书有什么问题?求求你,救命

在谷歌搜索结果中,我看到了许多类似的答案——更新“openssl”库、重新安装ruby、rvm、更新gemsets、bla-bla和许多其他。。。我什么都试过了,什么都帮不了我


环境:rails 4.1.6、ruby 2.1.4、OS_X Yosemite

我添加到我的应用程序中初始化这个不漂亮的尖峰:

if Rails.env.development? 
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 
end

现在登录可以在开发模式下工作。

另一个答案是禁用OpenSSL的
验证\u PEER
选项,这意味着你的应用程序没有验证证书,你无法在查询时验证你是否连接到谷歌。这是一个巨大的安全风险,您永远不应该这样做

针对您所描述的问题,google api ruby client()的GitHub repo上存在一个问题。当前的解决方法是将以下内容添加到应用程序中:

ENV['SSL_CERT_FILE'] = Gem.loaded_specs['google-api-client'].full_gem_path+'/lib/cacerts.pem'

对于Rails应用程序,您可以在
config/application.rb

中将其作为一行添加。简而言之,您应该执行以下操作:

rvm remove 2.1.4
rvm install 2.1.4 --disable-binary
以下是完整的解决方案及其说明:

当我将上面的行添加到配置文件my Rails app时,我的本地服务器无法启动。你能提供更多关于实现的细节吗?我猜你没有安装gem“google api client”,它提供了修复它的证书文件,如果你没有/想要这个gem,你也可以将你的SSL\u CERT\u文件指向另一个cacerts.pem文件。实现的细节以及为什么它是一个可以修复的问题是在github问题上,我以为你在使用这个gem,但你显然不是。