我在端口 3101
上运行了一个 Rails 应用程序我通过 Apache 反向代理设置(就像 Phusion 在 this blog post 上建议的那样)将它提供给互联网。
我正在使用 Devise + OmniAuth 来处理 Facebook 身份验证。
但是当我尝试通过 Facebook 进行身份验证时,我被重定向到以下网址:http://mydomain.com:3101/my_callback_path
我用 passenger start -a 127.0.0.1 -p 3101 -d
启动 rails 应用程序我的 Apache 设置是:
<VirtualHost *:80>
ServerName mydomain.com
PassengerEnabled off
ProxyPass / http://127.0.0.1:3101/
ProxyPassReverse / http://127.0.0.1:3101
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
我找到了一些答案,例如 this和 this但它们都是针对 Nginx 设置的。
我尝试将初始化程序与
OmniAuth.config.full_host = 'http://my domain.com'
一起使用但我想知道我的 apache 设置中是否没有缺少配置(如之前的答案)。提前致谢。
最佳答案
我查看了OmniAuth源,发现回调机制内部使用了一个名为full_host
的方法。查找配置变量,然后构建 URI 的第一部分 - 查看 oa-core-0.2.6/lib/omniauth/strategy.rb
配置变量可以是一个字符串(如您的情况)、Proc 或 nil(或其他任何东西)。在后一种情况下,请求 URI 被解析、切碎并返回。
我认为我们不能仅仅通过在 Apache 中设置一个环境变量来解决我们的常见问题(这可能应该在较低的级别完成,在 ruby 应用程序堆栈中),但经过一些实验,我发现这对于我:
OmniAuth.config.full_host = lambda do |env|
scheme = env['rack.url_scheme']
local_host = env['HTTP_HOST']
forwarded_host = env['HTTP_X_FORWARDED_HOST']
forwarded_host.blank? ? "#{scheme}://#{local_host}" : "#{scheme}://#{forwarded_host}"
end
关于ruby-on-rails - OmniAuth 在反向代理设置中使用错误的回调端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6803307/