是的,我们按照 Akber 的建议做了。我们有两个站点,xxx.com
并且xxx.co.uk
我们想为两个站点 OAuth 使用一个 github 应用程序。
我们使用了 Rails 和 OmniAuth gem。
我们需要做的第一件事是追加com
或co.uk
到回调 URL 的末尾
class OmniAuth::Strategies::GitHub
# Some code are omitted
def callback_url
url = super
matches = url.match(/xxx\.([a-z|\.]+)(:\d+)?\//)
if matches && matches[1] != 'com'
tld = matches[1]
url.gsub!("xxx.#{matches[1]}", 'xxx.com')
url << "/#{tld}"
end
url
end
end
这是在 github OAuth 回调时重定向的 rails 中间件代码
def call(env)
match = env["PATH_INFO"].match(/\A\/users\/auth\/github\/callback\/(.+)\Z/)
if match
host = env["HTTP_HOST"]
[301, {"Location" => "#{env['rack.url_scheme']}://#{host.gsub('com', match[1])}/users/auth/github/callback?#{env["QUERY_STRING"]}"}, self]
else
@app.call(env)
end
end