2013-10-29 9 views
14

Wir versuchen, das Linkedin-Omniauth Gem in einer Rails-Anwendung, die hinter einem http-Proxy ist, zu verwenden.Rails Omniahut mit ausgehenden http-Proxy

Ich habe alles versucht, was ich finden kann, um omniauth zu bekommen, um den Proxy zu benutzen, aber ich kann es nicht zur Arbeit bringen.

Die following post schlägt vor, mit:

provider :linkedin, 'xxx', 'xxx', { 
    :client_options => { 
    :proxy => ENV["HTTP_PROXY"] || ENV["http_proxy"] 
    } 
} 

Was nicht für mich arbeiten, und ich sehe keine Erwähnung von ‚Proxy‘ in der Quelle. Ich habe auch versucht, den Proxy zu codieren. Kein Erfolg.

This SO post doesn't work for me either.

Ich habe auch eine initialiser für net :: http mit einem Proxy. Das funktioniert auch nicht. Ich habe den Proxy in meine Shell und bashrc exportiert. Und in/etc/environment. Nichts funktioniert.

Wie kann ich Omniauth einen ausgehenden Proxy verwenden?

--- UPDATE ---

Während die akzeptierte Antwort unten in der Tat für Linkedin Oauth funktioniert, die meisten Edelsteine ​​vertrauen auf OAuth2. Damit entfällt mit Net :: HTTP und führt Faraday, die auf Regeln für die Proxy/Verbindungseinstellungen einen separaten Satz hat.

https://github.com/simonmorley/oauth2/blob/master/lib/oauth2/client.rb#L36

Um einen Proxy zu bekommen mit späterem gems arbeiten (inc beliebte Facebook, Google, Github überprüfen, welche gem sie verlassen sich auf), benötigen Sie die folgenden in Ihrem initialiser zu verwenden:

provider :foursquare, 'xxx', 'xxx', { 
    :client_options => { 
     :connection_opts => { 
     :proxy => "http://127.0.0.1:3128" 
     } 
    } 
    } 
+0

Dies ist ein großartiges Update! Ich bin definitiv auf dem OAuth2-Zug, da ich meine Website zu einem Anbieter machen musste. Vielleicht möchten Sie die Proxy-Einstellung überprüfen, da der localhost für Port 3128 etwas zu spezifisch für den allgemeinen Fall klingt, es sei denn, jeder Proxy funktioniert wie ein Squid-Proxy (http://www.squid-cache.org/). – Marc

+1

3128 localhost, jus 'zum Testen :) Blimey, wer hätte gedacht, dass das Einbetten der Server hinter einen Proxy so viel Schmerz verursachen würde! – simonmorley

+1

Sie predigen dem Chor, Playboy! – Marc

Antwort

2

ich kam in dieses pull-request von vor einem Jahr, die das gleiche Problem für omniauth-twitter fixiert. Wenn man sich die fix schauen, scheint es, dass alles, was sie taten dies ändern:

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'} 

dazu:

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} 

Ich nehme an, das die oauth setzt „proxy“ Wert Parameter, der sein wird, den Anforderungsheader durchlaufen. Ich denke, wenn Sie das omniauth-linkedin Repo forkeln und eine ähnliche Änderung in OmniAuth::Strategies::LinkedIn vornehmen, sollte es Sie über den Proxy-Server authentifizieren. Ich schlage vor, eine Änderung entlang der Linien von:

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 
     } 

Dies sollte die Umgebung umwandeln in eine URI-Instanz einstellen, dass OmniAuth verbrauchen, parametrieren und ordnungsgemäß in der Anfrage platzieren.

+0

Prost, es ist gerade erst soweit gekommen, das wieder zu sehen. – simonmorley

+0

In der Tat, geringfügige Änderung des Plans, der die meisten oauth Edelsteine ​​bemerkt hat, benutzen jetzt Oauth2 .. Haben ein Beispiel für jedermann hinzugefügt, das in der Zukunft sucht. Scheint ziemlich hoch auf dem Google Rn zu sein. – simonmorley

Verwandte Themen