Lately I had some problems with invalid callback url I was getting on my production server (shared host). Omniauth in response included port used internally by nginx (eg. this could be the case eg. when you have varnish in front of you web server) - after browsing the source code of omniauth gem I have found out that you can easily fix if without even touching webserver configuration (and I didn’t had access to it anyway :P).
So take a look at strategy.rb
, you have there method full_host
and as you see below in the first place it tries to fetch it’s value from user’s configuration.
# omniauth/lib/omniauth/strategy.rb
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.gsub(/\?.*$/,''))
uri.path = ''
uri.query = nil
#sometimes the url is actually showing http inside rails because the other layers (like nginx) have handled the ssl termination.
uri.scheme = 'https' if request.ssl?
uri.to_s
end
end
So to fix it you can add to your production environment something like this:
# config/environments/production.rb
OmniAuth.config.full_host = "http://example.com"
Yep - that’s all :).