1

在 Rails 中调用 _url 助手时,它将返回 host+port+path 例如

photo_url

将返回

http://localhost:3000/photo

在我的生产环境中,我在给定端口上为 rails 应用程序提供瘦服务,而在另一个端口上提供静态内容的 apache。当站点在没有任何端口的情况下被访问时,每个服务器都知道要处理的部分并且一切都很好。但是,如果给定了特定端口,则只有请求的服务器会发送响应(这是预期的)。

我现在遇到了麻烦,因为当我通过 oauth2 (facebook, twitter) oder openid 对用户进行身份验证时,我需要发送一个回调 url。我使用的 gem(OmniAuth)使用 _url 助手(据我所知)(callback_url)来计算回调 url。由于附加的端口号,这导致对进一步请求的响应很薄弱。

有没有办法告诉 Rails,它没有在任何特定端口上运行?或者它不使用 _url 助手中的端口号?

4

2 回答 2

1

OmniAuth 不使用帮助程序,而是使用自己的方法解析request.url计算完整路径,除非您自己提供配置。

OmniAuth 的callback_url

def callback_url
  full_host + callback_path
end

OmniAuth 的full_host

def full_host
  case OmniAuth.config.full_host
    when String
      OmniAuth.config.full_host
    when Proc
      OmniAuth.config.full_host.call(env)
    else
      uri = URI.parse(request.url)
      uri.path = ''
      uri.query = nil
      uri.to_s
  end
end

因此,如果您访问 上的页面http://localhost:3000/whatever,OmniAuth 将http://localhost:3000用作full_url. 如果页面是在 上访问的http://mysite.com/whateverfull_url将会是http://mysite.comthin因此,为页面提供服务的服务器的端口号不应附加到 URL,除非用于访问将用户重定向到回调的页面的 URL 包含端口号。

请注意,如有必要,您可以将 OmniAuth 配置为使用固定值,方法full_host是设置OmniAuth.config.full_host为 aStringProc返回您要使用的值。

于 2011-02-26T23:05:46.310 回答
0

您可以改用 photo_path 吗?

于 2010-10-29T11:54:55.547 回答