在Rails 3应用程序中使用带有Devise和OmniAuth的Koala获取SSL错误

van*_*san 6 facebook devise omniauth ruby-on-rails-3 koala

我正在使用Devise/OmniAuth和Koala构建一个Rails 3应用程序,我收到以下SSL错误:

OpenSSL::SSL::SSLError in Users/omniauth callbacksController#facebook
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
Run Code Online (Sandbox Code Playgroud)

导致此错误的代码是:

@graph = Koala::Facebook::GraphAPI.new(@token)
@friends = @graph.get_connections("me", "friends")
Run Code Online (Sandbox Code Playgroud)

我正在使用Devise与OmniAuth进行身份验证,这是有效的.然后,我将获取返回的facebook令牌,并尝试将其与Koala一起使用,如上所示.这就是造成这个错误的原因.

值得注意的是,我最初收到了与Devise&OmniAuth相同的错误.有一些关于此错误的主题,我可以通过设置我的config/initialisers/devise.rb来解决它,

config.omniauth :facebook, APPID, APPKEY, {:client_options => {:ssl => {:ca_file =>  "/opt/local/share/curl/curl-ca-bundle.crt"}}} 
Run Code Online (Sandbox Code Playgroud)

我猜我需要为Koala提供类似的配置,以便它知道在哪里检索本地ca_file.我在文档中找不到任何关于如何这样做的说明.有关如何执行此操作的任何想法,或一般如何避免错误?

我的开发环境是OSX.

sky*_*ker 5

来自Koala repo https://github.com/arsduo/koala

您可以在Koala初始化程序中进行设置,该初始化程序将全局设置此选项

/config/initializers/koala.rb

Koala.http_service.http_options = {
  :ssl => { :ca_path => "/etc/ssl/certs" }
}
Run Code Online (Sandbox Code Playgroud)


小智 1

正如我在此线程中发现的,您可以在环境文件(或使用 gem 的类)中设置以下选项:

Koala.http_service.ca_file = '/path/to/some/ca-certificate.crt'
Run Code Online (Sandbox Code Playgroud)