【问题标题】:ROR - Google OAuth2 callback phase initiated, then timeoutROR - Google OAuth2 回调阶段启动,然后超时
【发布时间】:2017-07-31 09:27:37
【问题描述】:

oAuth 进程在 Heroku 上运行良好,但我无法让它在本地运行。我的应用程序通过 oAuth 流程发送用户,但回调永远不会到达控制器(通过在它应该到达的控制器的 create 方法中放置一个 pry 进行测试)。奇怪的是它曾经在本地工作。我什至回到了它无济于事的时候。任何帮助将不胜感激!

编辑:我创建了一个全新的应用程序,并且存在同样的问题。这一定与我的计算机/网络有关。有什么想法吗?

终端

Started GET "/auth/google_oauth2" for ::1 at 2017-03-09 22:38:58 -0700
I, [2017-03-09T22:38:58.613208 #40471]  INFO -- omniauth:(google_oauth2) Request phase initiated.
Started GET "/auth/google_oauth2/callback?state=abunchofrandomnumbers&code=morerandomnumbers" for ::1 at 2017-03-09 22:38:59 -0700
I, [2017-03-09T22:38:59.492677 #40471]  INFO -- omniauth: (google_oauth2) Callback phase initiated.

Faraday::ConnectionFailed (execution expired)

config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV['youtube_id'], ENV['youtube_secret'], scope: 'userinfo.profile,youtube'
end

routes.rb

get '/auth/:provider/callback', to: 'youtube_users#create'

宝石文件

gem 'rails', '~> 5.0.1'
gem 'pg', '~> 0.18'
gem 'puma', '~> 3.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'jquery-rails'
gem 'jbuilder', '~> 2.5'
gem 'bcrypt', '~> 3.1.7'
gem 'figaro'
gem 'faraday'
gem 'bootstrap-sass'
gem 'yt'
gem 'omniauth-google-oauth2'
gem 'rails-html-sanitizer'
gem 'bootstrap_form'

Google 开发控制台凭据

Origin: http://localhost:3000
Redirect URI: http://localhost:3000/auth/google_oauth2/callback

Image of errors in browser

development.log

Started GET "/auth/google_oauth2" for ::1 at 2017-03-12 00:45:13 -0700
(google_oauth2) Request phase initiated.
Started GET "/auth/google_oauth2/callback?state=ecc60cda112ce1f74a28318ac2f2e148debe8afde204d307&code=4/9aFUvRVFluC7fwiDXkstbjZVoiWj684ViSbObLIfSsQ" for ::1 at 2017-03-12 00:45:16 -0700
(google_oauth2) Callback phase initiated.

Faraday::ConnectionFailed (execution expired):

/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:880:in `initialize'
/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:880:in `open'
/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:880:in `block in connect'
/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/timeout.rb:101:in `timeout'
/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:878:in `connect'
/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:863:in `do_start'
/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:852:in `start'
/Users/brad/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/net/http.rb:1398:in `request'
faraday (0.11.0) lib/faraday/adapter/net_http.rb:80:in `perform_request'
faraday (0.11.0) lib/faraday/adapter/net_http.rb:38:in `block in call'
faraday (0.11.0) lib/faraday/adapter/net_http.rb:85:in `with_net_http_connection'
faraday (0.11.0) lib/faraday/adapter/net_http.rb:33:in `call'
faraday (0.11.0) lib/faraday/request/url_encoded.rb:15:in `call'
faraday (0.11.0) lib/faraday/rack_builder.rb:139:in `build_response'
faraday (0.11.0) lib/faraday/connection.rb:377:in `run_request'
oauth2 (1.3.1) lib/oauth2/client.rb:99:in `request'
oauth2 (1.3.1) lib/oauth2/client.rb:146:in `get_token'
oauth2 (1.3.1) lib/oauth2/strategy/auth_code.rb:30:in `get_token'
omniauth-google-oauth2 (0.4.1) lib/omniauth/strategies/google_oauth2.rb:107:in `custom_build_access_token'
omniauth-oauth2 (1.4.0) lib/omniauth/strategies/oauth2.rb:73:in `callback_phase'
omniauth (1.6.1) lib/omniauth/strategy.rb:230:in `callback_call'
omniauth (1.6.1) lib/omniauth/strategy.rb:187:in `call!'
omniauth (1.6.1) lib/omniauth/strategy.rb:167:in `call'
omniauth (1.6.1) lib/omniauth/builder.rb:63:in `call'
rack (2.0.1) lib/rack/etag.rb:25:in `call'
rack (2.0.1) lib/rack/conditional_get.rb:25:in `call'
rack (2.0.1) lib/rack/head.rb:12:in `call'
rack (2.0.1) lib/rack/session/abstract/id.rb:222:in `context'
rack (2.0.1) lib/rack/session/abstract/id.rb:216:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/cookies.rb:613:in `call'
activerecord (5.0.2) lib/active_record/migration.rb:553:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
activesupport (5.0.2) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
activesupport (5.0.2) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
activesupport (5.0.2) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.2) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
web-console (3.4.0) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.4.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.4.0) lib/web_console/middleware.rb:18:in `catch'
web-console (3.4.0) lib/web_console/middleware.rb:18:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.2) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.2) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.2) lib/active_support/tagged_logging.rb:69:in `block in tagged'
activesupport (5.0.2) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.2) lib/active_support/tagged_logging.rb:69:in `tagged'
railties (5.0.2) lib/rails/rack/logger.rb:24:in `call'
sprockets-rails (3.2.0) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.0.1) lib/rack/method_override.rb:22:in `call'
rack (2.0.1) lib/rack/runtime.rb:22:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.2) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.0.1) lib/rack/sendfile.rb:111:in `call'
railties (5.0.2) lib/rails/engine.rb:522:in `call'
puma (3.8.1) lib/puma/configuration.rb:224:in `call'
puma (3.8.1) lib/puma/server.rb:590:in `handle_request'
puma (3.8.1) lib/puma/server.rb:425:in `process_client'
puma (3.8.1) lib/puma/server.rb:289:in `block in run'
puma (3.8.1) lib/puma/thread_pool.rb:120:in `block in spawn_thread'
  Rendering /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
  Rendering /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (4.1ms)
  Rendering /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (4.9ms)
  Rendering /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.7ms)
  Rendered /Users/brad/.rvm/gems/ruby-2.3.0/gems/actionpack-5.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (95.2ms)

【问题讨论】:

  • 对于遇到类似问题的任何人,问题出在我的 omniauth.rb 文件中。 userinfo.profile 不起作用,所以我将其更改为:scope: ['youtube', 'plus.me']

标签: ruby-on-rails youtube-api google-oauth faraday


【解决方案1】:

您可能需要首先检查您是否已经指定了本地主机端口并在您的开发者控制台中添加了/oauth2callback,如下图所示。看看它是否有效。

否则,请查看OpenID Connect 的完整文档,其中The Discovery document 中提到:

OpenID Connect 协议需要使用多个端点来对用户进行身份验证,以及请求包括令牌、用户信息和公钥在内的资源。

为了简化实施并提高灵活性,OpenID Connect 允许使用“发现文档”,即在知名位置找到的 JSON 文档,其中包含提供有关 OpenID Connect 提供程序配置的详细信息的键值对,包括 URI authorizationtokenuserinfopublic-keys endpoints 中的一个。

有了这个,您可能还想使用GitHub post中给出的以下配置:

export OAUTH_AUTHORIZATION_URL="https://accounts.google.com/o/oauth2/v2/auth"
export OAUTH_TOKEN_URL="https://www.googleapis.com/oauth2/v4/token"
export OAUTH_USERINFO_URL="https://www.googleapis.com/oauth2/v3/userinfo"
export OAUTH_CLIENT_ID="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.apps.googleusercontent.com"
export OAUTH_CLIENT_SECRET="BBBBBBBBBBBBBBBBBBBBBBBB"
export OAUTH_CALLBACK_URL="http://localhost:7100/auth/oauth/callback"
export OAUTH_SCOPE="openid email"

# Now you can just run stf local without the annoying auth options.
stf local --auth-type oauth

希望有帮助

【讨论】:

  • 感谢您的回答,但它似乎非常特定于 stf,而不是 Rails。另外,我的来源和重定向 URI 是正确的。他们在原始帖子中。回调工作正常,然后我更改了范围内的某些内容(omniauth.rb 初始化程序),它停止工作。我将我的更改恢复到它工作时,但它没有修复它。我尝试使用 webrick 而不是 Puma,在不同的端口上运行服务器,使用 127.0.0.1 作为回调等等。我很困惑。
猜你喜欢
  • 2017-06-13
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2023-03-05
  • 2018-12-24
  • 1970-01-01
相关资源
最近更新 更多