2

我有一个 Rails 应用程序设置为 OAuth2 提供程序(使用 Doorkeeper)。该应用程序为每个用户帐户使用不同的子域(或通过 cname 记录使用完全不同的域)

i.e. 
user1.myrailsapp.com
user2.myrailsapp.com
www.mycustomdomain.com

在提供商方面,一切都按预期工作。

我还有第二个应用程序,它是一个使用第一个应用程序公开 API 的客户端。我有一个版本的客户端工作,但仅在 OmniAuth 策略中使用硬编码的站点 url。

问题是,如何根据每个请求动态设置策略 url。

4

2 回答 2

3

对于任何感兴趣的人,解决方案是使用动态提供程序:https ://github.com/intridea/omniauth/wiki/Dynamic-Providers

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :mystrategy, ENV["OAUTH_ID"], ENV["OAUTH_SECRET"],
    :setup => lambda{|env| 
      env['omniauth.strategy'].options[:client_options].site = env['rack.session']['oauth_site']
    }
end
于 2012-06-25T07:51:58.753 回答
0

一种选择是不要那样做。

我有一个类似的应用程序并遇到了同样的问题。然而,在考虑了片刻之后,我意识到我不想将它们发送到用户帐户子域上的策略提供者 URL,因为该请求尚未完全验证(它尚未被 rails 应用程序处理) )。

同样,第一次用户登录的用户帐户子域尚未设置,因此不可能路由到那里。

因此,我将策略回调 URL 设置为主网站。处理完登录请求、会话设置和所有内容后,我将客户端重定向到他们的用户子域。消除了整个痛苦。

于 2012-06-25T08:28:44.457 回答