We're trying to use the linkedin-omniauth gem in a Rails application that's behind an http proxy.
I've tried everything I can find to get omniauth to use the proxy but I cannot get it to work.
The following post suggests using:
provider :linkedin, 'xxx', 'xxx', {
:client_options => {
:proxy => ENV["HTTP_PROXY"] || ENV["http_proxy"]
}
}
Which doesn't work for me and I see no mention of 'proxy' in the source. I've also tried hard coding the proxy. No success.
This SO post doesn't work for me either.
I also created an initialiser for net::http with a proxy. That also doesn't work. I've exported the proxy in my shell and bashrc. And in /etc/environment. Nothing's working.
How can I get omniauth to use an outbound proxy?
--- UPDATE ---
Whilst the accepted answer below does indeed work for Linkedin Oauth, most gems now rely on Oauth2. This does away with Net::HTTP and introduces Faraday which has a separate set on rules for the proxy / connection settings:
https://github.com/simonmorley/oauth2/blob/master/lib/oauth2/client.rb#L36
In order to get a proxy working with later gems (inc. popular Facebook, Google, Github check what gem they rely on), you need to use the following in your initialiser:
provider :foursquare, 'xxx', 'xxx', {
:client_options => {
:connection_opts => {
:proxy => "http://127.0.0.1:3128"
}
}
}
I came across this pull-request from a year ago that fixed the same issue for omniauth-twitter. If you look at the fix, it appears that all they did was change this:
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'}
to this:
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}
I assume this sets the oauth "proxy" value parameter that will be passed through the request header. I think if you fork the omniauth-linkedin repo and make a similar change in OmniAuth::Strategies::LinkedIn, it should get you authenticated through the proxy server. I propose a change along the lines of:
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
}
This should convert the environment setting to a URI instance that OmniAuth can consume, parameterize, and properly place in the request.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With