【问题标题】:Ruby on Rails omniauth-facebook works in development, but fails in production on HerokuRuby on Rails omniauth-facebook 在开发中工作,但在 Heroku 上的生产失败
【发布时间】:2013-08-30 21:10:52
【问题描述】:

我在我的应用程序中使用omniauth-facebook。一切都对开发工作很好。一旦我上传到 heroku(我制作了另一个 facebook 应用程序,以补偿生产中的 url 变化)。我可以使用 mysitename.heroku.com/auth/facebook 访问 facebook 登录页面。但是,在我登录并单击接受/允许按钮后,出现故障,并且处理了 OmniAuth.config.on_failure 函数,然后我进入错误屏幕。

这是我在 .on_failure 函数中执行 [200, {}, [env['omniauth.error'].inspect]] 时遇到的错误:

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

这是似乎与命令相关的日志:heroku logs

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

所以我不确定,但我非常有信心这是一个 heroku 问题,因为它在我的 localhost:3000 上完美运行。除了主机 URL 之外,我的开发和生产版本在 Facebook 上的两个应用程序几乎相同。由于我至少可以尝试登录,因此我认为这与 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'

【问题讨论】:

  • 您的 Facebook 设置是什么?您是否检查了所有 URL(站点 URL、画布 URL、安全画布 URL 等)?
  • 我所有的 facebook url 设置都是空白的,除了“使用 Facebook 登录的网站”设置为 http://.herokuapp.com。其他都是空的。我检查了两次和三次。

标签: ruby-on-rails ruby facebook heroku omniauth


【解决方案1】:

我很确定您已将 Facebook 应用程序设置为使用“localhost”或某个开发服务器 URL 作为回调。它在生产中失败,因为您的生产服务器的 URL 未配置为应用程序的一部分。检查应用设置。

编辑:我可以看到一个名为“使用 Facebook 登录的网站”的部分,其中包含一个名为“站点 URL”的字段。你确定没有设置为localhost:3000

【讨论】:

  • 所以,就像我上面提到的,我必须要应用程序,一个用于生产,一个用于开发。我仔细检查并确保我的开发“Facebook 登录网站”指向 localhost:300,而我的产品指向 myappname.herokuapp.com。所有其他 URL 都留空。另外,我可以进入 facebook 的登录屏幕。但是,登录后,我会收到错误,仅在生产中。所以,我设置的唯一 URL 是正确的,我可以成功访问 /facebook/auth 页面。刚登录就报错了。
  • @JosephBui 你有关于这个问题的更新吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
相关资源
最近更新 更多