加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails Omniauth与出站的http代理

发布时间:2020-12-16 20:11:09 所属栏目:百科 来源:网络整理
导读:我们试图在一个位于http代理之后的Rails应用程序中使用linkedin-omniauth gem. 我已经尝试了所有可以找到的东西来使用这个代理,但是我无法让它工作. following post建议使用: provider :linkedin,'xxx',{ :client_options = { :proxy = ENV["HTTP_PROXY"] |
我们试图在一个位于http代理之后的Rails应用程序中使用linkedin-omniauth gem.

我已经尝试了所有可以找到的东西来使用这个代理,但是我无法让它工作.

following post建议使用:

provider :linkedin,'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中.没有任何工作.

如何获得全方位使用出站代理?

—更新—

虽然以下接受的答案确实适用于Linkedin Oauth,但大多数宝石现在依赖于Oauth2.这消除了Net :: HTTP,并引入了法拉第,它有一个单独的代理/连接设置规则集:

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

为了得到一个代理工作与后来的宝石(包括流行的Facebook,谷歌,Github检查他们依赖什么宝石),您需要在您的初始化程序中使用以下内容:

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

解决方法

一年前我遇到了这个 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,:site => 'https://api.twitter.com',:proxy => ENV['http_proxy'] ? URI(ENV['http_proxy']) : nil}

我假设这设置将通过请求头传递的oauth“proxy”值参数.我认为如果你在o003-linkin 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实例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读