3

我们 ror 应用程序中的每个客户都基于子域进行服务,他们有自己的 fbappid、fbsecretid(它为客户的 fb 应用程序提供动力)。我们使用omniauth、omniauth-facebook 来验证用户。所以 customer1.ourapp.com 为一个 appid 为 fbapp_1 的 fb 应用程序和一个 appid 为 fbapp_2 的 customer2.ourapp.com 服务器提供服务

facebook策略初始化的正常方法是将以下行放入初始化程序中

config.omniauth :facebook, APP_ID, SECRET, {:scope => 'publish_stream}

我们需要根据子域设置 APP_ID、SECRET,但看起来请求对象在初始化程序时不可用我使用 setup=> 查看选项的动态设置但omniauth-facebook 似乎不支持 appid、appsecret 的设置动态的。

我们如何根据请求的子域动态设置omniauth-facebook的app_id和app_secret?提前致谢

4

1 回答 1

3

由于您使用的是设计,请尝试

config.omniauth  :facebook, :setup => lambda{
      current_domain = // Get current domain
      config = // Get config
      env['omniauth.strategy'].options[:client_id] = config[current_domain][Rails.env]["app_id"]
      env['omniauth.strategy'].options[:client_secret] = config[current_domain][Rails.env]["app_secret"]
    }

http://webcache.googleusercontent.com/search?q=cache:zmBqDAomJ84J:blog.cedricbousmanne.com/+&cd=2&hl=en&ct=clnk 提供了没有设计的解决方案,只有omniauth

[已编辑] 工作代码摘录

config.omniauth :facebook, {:setup => lambda{|env|
   env['omniauth.strategy'].options[:client_id] = $institute_tenant.fbappid
   env['omniauth.strategy'].options[:client_secret] = $institute_tenant.fbappsecret
}, :auth_type => 'https', :scope => 'email'}
于 2012-04-20T05:36:17.667 回答