2011-12-11 64 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'