我们正在尝试在http代理后面的Rails应用程序中使用linkedin-omniauth gem。
我已经尝试了一切我能找到的omniauth来使用代理,但我无法让它工作。
following post建议使用:
provider :linkedin, 'xxx', 'xxx', {
:client_options => {
:proxy => ENV["HTTP_PROXY"] || ENV["http_proxy"]
}
}
哪个对我不起作用,我在源代码中没有提到'代理'。我也试过硬编码代理。没有成功。
This SO post doesn't work for me either.
我还使用代理为net :: http创建了一个初始化器。这也行不通。我已经在我的shell和bashrc中导出了代理。在/ etc / environment中。什么都没有。
如何使用omniauth来使用出站代理?
---更新---
虽然下面接受的答案确实适用于Linkedin Oauth,但现在大多数宝石都依赖于Oauth2。这取消了Net :: HTTP并引入了Faraday,它对代理/连接设置的规则有单独的设置:
https://github.com/simonmorley/oauth2/blob/master/lib/oauth2/client.rb#L36
为了让代理使用后来的宝石(包括流行的Facebook,Google,Github检查他们依赖的宝石),您需要在初始化程序中使用以下内容:
provider :foursquare, 'xxx', 'xxx', {
:client_options => {
:connection_opts => {
:proxy => "http://127.0.0.1:3128"
}
}
}
答案 0 :(得分:2)
我在一年前遇到了这个pull-request,为omniauth-twitter解决了同样的问题。如果你看一下fix,看来他们所做的只是改变了这个:
require 'omniauth-oauth'
require 'multi_json'
module OmniAuth
module Strategies
class Twitter < OmniAuth::Strategies::OAuth
option :name, 'twitter'
option :client_options, {:authorize_path => '/oauth/authenticate',
:site => 'https://api.twitter.com'}
到此:
require 'omniauth-oauth'
require 'multi_json'
module OmniAuth
module Strategies
class Twitter < OmniAuth::Strategies::OAuth
option :name, 'twitter'
option :client_options, {:authorize_path => '/oauth/authenticate',
:site => 'https://api.twitter.com',
:proxy => ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil}
我假设这会设置将通过请求标头传递的oauth “proxy”值参数。我想如果你在ommineuth-linkedin repo中进行分叉并在OmniAuth::Strategies::LinkedIn中进行类似的更改,它应该通过代理服务器进行身份验证。我建议改变:
require 'omniauth/strategies/oauth'
module OmniAuth
module Strategies
class LinkedIn < OmniAuth::Strategies::OAuth
option :name, "linkedin"
option :client_options, {
:site => 'https://api.linkedin.com',
:request_token_path => '/uas/oauth/requestToken',
:access_token_path => '/uas/oauth/accessToken',
:authorize_url => 'https://www.linkedin.com/uas/oauth/authenticate',
:proxy => ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil
}
这应该将环境设置转换为OmniAuth可以使用,参数化并正确放置在请求中的URI实例。