Ruby on Rails omniauth-facebook работает в разработке, но не работает на Heroku

Я использую omniauth-facebook в своем приложении. В разработке все отлично работает. Как только я загружаю в героку (я сделал еще одно приложение для Facebook, чтобы компенсировать изменение URL-адреса в производстве). Я могу попасть на страницу входа в facebook, используя mysitename.heroku.com/auth/facebook. Однако после того, как я войду в систему и нажму кнопку «принять/разрешить», произойдет сбой, функция OmniAuth.config.on_failure будет обработана, и я перейду к моему экрану с ошибкой.

Вот ошибка, которую я получаю, когда делаю [200, {}, [env['omniauth.error'].inspect]] в моей функции .on_failure:

#<OAuth2::Error: : 
{"error":{"message":"Invalid redirect_uri: Given URL is not allowed by the Application configuration.","type":"OAuthException","code":191}}>

Вот журналы, которые кажутся актуальными для команды: журналы heroku

2013-08-27T22:44:20.842352+00:00 app[web.1]: Started GET "/auth/facebook" for 174.21.250.137 at 2013-08-27 22:44:20 +0000
2013-08-27T22:44:20.857734+00:00 heroku[router]: at=info method=GET path=/auth/facebook host=warm-anchorage-4172.herokuapp.com fwd="174.21.250.137" dyno=web.1 connect=10ms service=26ms status=302 bytes=262
2013-08-27T22:44:21.229031+00:00 heroku[web.1]: Stopping remaining processes with SIGKILL
2013-08-27T22:44:21.228882+00:00 heroku[web.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM
2013-08-27T22:44:21.609111+00:00 app[web.1]: Started GET "/auth/facebook/callback?code=AQD4g5_eZRBzwOOvl_qI64mnKtk1b4048YuGXVyBjfxer9QrSBgiMwL8Nxsr0yducrL1DMfK3EdNS5E8qljb7BWvSoIoysfXF3tbIs6_7VkV2LiRVfrmZ8goku1MweG46hagJtatAJTbVfZkE6VL4t-pX169DCrn6TRhkfJoNAnRF8Xs2wHbPg1pwsUOOi_BJdRXNx9noZ8Cnc51unUVVKez-MStbD9OfDST5PNZNJzZJhaXiC_K2JpTg2S2z8tptsEAFf-gV5Rim86tN66FTCLG-HVhKBHp3bJgiYdC0160Kp8m0oKrO9lwMJQr6NBTOSw&state=fd82e1208e9848d0deda8271118799c38c4350f9c9f95fc6" for 174.21.250.137 at 2013-08-27 22:44:21 +0000
2013-08-27T22:44:21.609111+00:00 app[web.1]: Started GET "/auth/facebook/callback?code=AQD4g5_eZRBzwOOvl_qI64mnKtk1b404YuGXVyBjfxer9QrSBgiMwL8Nxsr0yducrL1DMfK3EdNS5E8qljb7BWvSoIoysfXF3tbIs6_7VkV2LiRVfrmZ8goku1MweG46hagJtatAJTbVfZkE6VL4t-pX169DCrn6TRhkfJoNAnRF8Xs2wHbPg1pwsUOOi_BJdRXNx9noZ8Cnc51unUVVKez-MStbD9OfDST5PNZNJzZJhaXiC_K2JpTg2S2z8tptsEAFf-gV5Rim86tN66FTCLG-HVhKBHp3bJgiYdC0160Kp8m0oKrO9lwMJQr6NBTOSwstate=fd82e1208e9848d0deda8271118799c38c4350f9c995fc6" for 174.21.250.137 at 2013-08-27 22:44:21 +0000
2013-08-27T22:44:21.700789+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path=/auth/facebook/callback?code=AQD4g5_eZRBzwOOvl_qI64mnKtk1b4048YuGXVyBjfxer9QrSBgiMwL8Nxsr0yducrL1DMfK3EdNS5E8qljb7BWvSoIoysfXF3tbIs6_7VkV2LiRVfrmZ8goku1MweG46hagJtatAJTbVfZkE6VL4t-pX169DCrn6TRhkfJoNAnRF8Xs2wHbPg1pwsUOOi_BJdRXNx9noZ8Cnc51unUVVKez-MStbD9OfDST5PNZNJzZJhaXiC_K2JpTg2S2z8tptsEAFf-gV5Rim86tN66FTCLG-HVhKBHp3bJgiYdC0160Kp8m0oKrO9lwMJQr6NBTOSw&state=fd82e1208e9848d0deda8271118799c38c4350f9c9f95fc6 host=warm-anchorage-4172.herokuapp.com fwd="174.21.250.137" dyno=web.1 connect=2ms service=114ms status=503 bytes=0
2013-08-27T22:44:22.939414+00:00 heroku[web.1]: Process exited with status 137
2013-08-27T22:44:34.222678+00:00 app[web.1]: [2013-08-27 22:44:34] INFO  WEBrick 1.3.1
2013-08-27T22:44:34.222781+00:00 app[web.1]: [2013-08-27 22:44:34] INFO WEBrick::HTTPServer#start: pid=2 port=13228
2013-08-27T22:44:34.222678+00:00 app[web.1]: [2013-08-27 22:44:34] INFO  ruby 1.9.3   (2013-06-27) [x86_64-linux]

Вот как выглядит мой omniauth.rb:

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  if Rails.env.production?
    provider :facebook, "********72531693", "*******32c00b6bd32b70fa939e6a7c1"
    {:scope => 'PERMISSION_1, PERMISSION_2, PERMISSION_3...', :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}}}
  end
    provider :facebook, "********45876931", "*******2abe337c16c135f06404c91a"
    {:scope => 'PERMISSION_1, PERMISSION_2, PERMISSION_3...', :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}}}
end

OmniAuth.config.on_failure = Proc.new do |env|
  UsersController.action(:omniauth_failure).call(env)
  #this will invoke the omniauth_failure action in UsersController.
end

Так что я не уверен, но я вполне уверен, что это проблема с героку, поскольку она отлично работает в разработке на моем локальном хосте: 3000. Оба моих приложения почти идентичны на facebook для моей версии для разработчиков и производственной версии, кроме URL-адреса хоста. Поскольку я могу хотя бы попытаться войти в систему, я не думаю, что это имеет какое-либо отношение к настройке facebook. Я пробовал использовать как omniauth-facebook 1.4.0, так и 1.4.1.

Добавляю файлы маршрутов на случай, если кто-то увидит что-то, чего не вижу я.

root  'welcome#index'
match '/signup',  to: 'users#new',  via: 'get'
match '/signin',  to: 'sessions#new', via: 'get'
match '/signout',  to: 'sessions#destroy', via: 'delete'
match '/about', to: 'static_pages#about', via: 'get'
match '/help', to: 'static_pages#help', via: 'get'
match '/auth/:provider/callback', to: 'sessions#createfb', via: 'get'

person Joseph Bui    schedule 27.08.2013    source источник
comment
Какие у вас настройки Facebook? Вы проверили все URL-адреса (URL-адрес сайта, URL-адрес холста, URL-адрес безопасного холста и т. д.)?   -  person Aupajo    schedule 28.08.2013
comment
Все мои настройки URL-адреса в Facebook пусты, за исключением веб-сайта с входом в Facebook, для которого установлено значение http://‹название моего сайта›.herokuapp.com. Все остальные пусты. Я дважды и трижды проверял.   -  person Joseph Bui    schedule 29.08.2013


Ответы (1)


Я почти уверен, что вы настроили свое приложение Facebook для использования «localhost» или URL-адреса сервера разработки в качестве обратного вызова. Это не работает в производстве, потому что URL-адрес вашего рабочего сервера не настроен как часть приложения. Проверьте настройки приложения.

Изменить: я вижу раздел под названием «Веб-сайт с входом в Facebook», в котором есть поле «URL-адрес сайта». Вы уверены, что не установили его на localhost:3000?

person audiodude    schedule 27.08.2013
comment
Итак, как я упоминал выше, у меня есть приложения, одно для производства и одно для разработки. Я дважды проверил и убедился, что мой веб-сайт разработки для входа в Facebook указывает на localhost: 300, в то время как мой продукт указывает на myappname.herokuapp. ком. Все остальные URL-адреса остаются пустыми. Кроме того, я могу попасть на экран входа в Facebook. Однако после входа в систему я получаю сообщение об ошибке только на производстве. Итак, единственный URL-адрес, который я установил, правильный, и я могу успешно перейти на страницу /facebook/auth. Сразу после входа ошибка. - person Joseph Bui; 28.08.2013
comment
@JosephBui У вас есть обновления по этой проблеме? - person jizak; 03.07.2014