Как обрабатывать обратные вызовы OmniAuth в нескольких средах? - PullRequest
5 голосов
/ 05 декабря 2011

У меня есть приложение, которое использует Facebook исключительно в качестве поставщика для аутентификации и правильно настроило обратный вызов для производственного режима.Чтобы это работало, вы предоставляете своему приложению Facebook URL-адрес сайта и домен сайта для обратных вызовов, и в моем случае это http://appname.heroku.com и appname.heroku.com соответственно.

Проблема в том, что мои контроллерыВ настройках разрешены только аутентифицированные сеансы, поэтому я не могу просматривать свое приложение в режиме разработки, поскольку домен приложения Facebook, очевидно, не был установлен как localhost.

Как мне обойти это без необходимости изменять его в настройках Facebook?

Ответы [ 2 ]

10 голосов
/ 10 января 2012

Почему бы просто не создать переменные ENV [] в файлах окружения и использовать их следующим образом в инициализаторе:

provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK']
provider :twitter, ENV['TWITTER_KEY'], ENV['TWITTER_SECRET']

Мне это кажется намного проще (и короче).

10 голосов
/ 05 декабря 2011

Создайте еще одно приложение facebook с доменом localhost:3000 для разработки и создайте config.yml в каталоге config

development:
  facebook_api_key: 656756786867868
  facebook_api_secret: 4sdffdh6u345436

production:
  facebook_api_key: 45778799
  facebook_api_secret: fghjkbbcbcbcbcb

Теперь добавьте load_config.rb в папку инициализаторов

# load config
AppConfig = YAML.load_file(Rails.root.join('config', 'config.yml'))

# Override config options by correct environment
env_options = AppConfig.delete(Rails.env)

AppConfig.merge!(env_options) unless env_options.nil?

И, наконец, добавьте это к omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
   provider :facebook, AppConfig['facebook_api_key'], AppConfig['facebook_api_secret']           
end

Это займет ваши ключи в зависимости от окружения рельсов.Вот и все, надеюсь, это поможет вам.

...