2011-12-11 52 views
0

我为我的web应用程序(www.example.heroku.com,www.example2.com和www.example3.com)使用了不同的域名。身份验证与Omniauth 0.2.6带有多个域名的omniauth 0.2.6

如果我希望我的用户通过Facebook进行身份验证,我需要一个不同的Facebook应用程序帐户为每个域名,所以不同的应用程序ID和密钥。

当定义在omniauth初始化的应用程序ID和机密密钥(提供商:脸谱, “APP_ID”, “APP_SECRET”),如何才能I:

  • 定义多个应用ID /密钥

  • 或有条件地定义IDS /键将当前域名

我一直在尝试没有成功整天...

+0

解决方案:https://github.com/intridea/omniauth/wiki/Dynamic-Providers/eb14c359a585a9e8e445a9a8ea7c46d8fb0e7358 –

回答

2

这样做的设置在Omniauth 1.1.0的setup phase

您现在已经改变了你的omniauth.rb

provider_keys = YAML.load_file(File.join(Rails.root, 'config', 'provider_keys.yml')) 

SETUP_PROC = lambda do |env| 
    env['omniauth.strategy'].options[:client_id]  = provider_keys[Rails.env]['facebook'][server_name]['consumer_key'] 
    env['omniauth.strategy'].options[:client_secret] = provider_keys[Rails.env]['facebook'][server_name]['consumer_secret'] 
end 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, setup: SETUP_PROC 
end 

设置这和您的provider_keys.yml会是这个样子

development: 
    facebook: 
    www.example.heroku.com: 
     consumer_key: 'xxxxxxxx' 
     consumer_secret: 'xxxxxxxx' 
    www.example.com: 
     consumer_key: 'xxxxxxx' 
     consumer_secret: 'xxxxxxx'