我已经为这个错误苦苦挣扎了一段时间,还没有完全弄清楚我做错了什么。
我的网站可以在这里找到:https ://chaynring.com
我的问题:在本地运行服务器时,我可以毫无问题地通过 Google Oauth2 进行身份验证;但是,Google Oauth2 在我的服务器(由 Heroku 托管)上失败了,我不知道为什么。
这是我的路线的粘贴箱:https ://pastebin.com/S8piCjcw
我在 Heroku 上得到的日志是:
2021-04-20T02:32:40.506069+00:00 heroku[router]: at=info method=GET path="/auth/google_oauth2" host=chaynring.com request_id=055519f9-9246-4966-8b7a-4b3016a7dee6 fwd="142.147.57.249" dyno=web.1 connect=1ms service=7ms status=404 bytes=1966 protocol=https
2021-04-20T02:32:40.500506+00:00 app[web.1]: I, [2021-04-20T02:32:40.500394 #4] INFO -- : [055519f9-9246-4966-8b7a-4b3016a7dee6] Started GET "/auth/google_oauth2" for 142.147.57.249 at 2021-04-20 02:32:40 +0000
2021-04-20T02:32:40.502460+00:00 app[web.1]: F, [2021-04-20T02:32:40.502396 #4] FATAL -- : [055519f9-9246-4966-8b7a-4b3016a7dee6]
2021-04-20T02:32:40.502560+00:00 app[web.1]: F, [2021-04-20T02:32:40.502498 #4] FATAL -- : [055519f9-9246-4966-8b7a-4b3016a7dee6] ActionController::RoutingError (No route matches [GET] "/auth/google_oauth2"):
2021-04-20T02:32:40.502652+00:00 app[web.1]: F, [2021-04-20T02:32:40.502585 #4] FATAL -- : [055519f9-9246-4966-8b7a-4b3016a7dee6]
2021-04-20T02:32:40.502766+00:00 app[web.1]: F, [2021-04-20T02:32:40.502692 #4] FATAL -- : [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/actionpack-5.2.4.5/lib/action_dispatch/middleware/debug_exceptions.rb:65:in `call'
2021-04-20T02:32:40.502768+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/actionpack-5.2.4.5/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
2021-04-20T02:32:40.502769+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/railties-5.2.4.5/lib/rails/rack/logger.rb:38:in `call_app'
2021-04-20T02:32:40.502770+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/railties-5.2.4.5/lib/rails/rack/logger.rb:26:in `block in call'
2021-04-20T02:32:40.502771+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.4.5/lib/active_support/tagged_logging.rb:71:in `block in tagged'
2021-04-20T02:32:40.502771+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.4.5/lib/active_support/tagged_logging.rb:28:in `tagged'
2021-04-20T02:32:40.502772+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.4.5/lib/active_support/tagged_logging.rb:71:in `tagged'
2021-04-20T02:32:40.502772+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/railties-5.2.4.5/lib/rails/rack/logger.rb:26:in `call'
2021-04-20T02:32:40.502773+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/actionpack-5.2.4.5/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
2021-04-20T02:32:40.502773+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/actionpack-5.2.4.5/lib/action_dispatch/middleware/request_id.rb:27:in `call'
2021-04-20T02:32:40.502774+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/method_override.rb:24:in `call'
2021-04-20T02:32:40.502774+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/runtime.rb:22:in `call'
2021-04-20T02:32:40.502775+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/activesupport-5.2.4.5/lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
2021-04-20T02:32:40.502775+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/actionpack-5.2.4.5/lib/action_dispatch/middleware/executor.rb:14:in `call'
2021-04-20T02:32:40.502776+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/actionpack-5.2.4.5/lib/action_dispatch/middleware/static.rb:127:in `call'
2021-04-20T02:32:40.502776+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/rack-2.2.3/lib/rack/sendfile.rb:110:in `call'
2021-04-20T02:32:40.502776+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/actionpack-5.2.4.5/lib/action_dispatch/middleware/ssl.rb:74:in `call'
2021-04-20T02:32:40.502777+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/railties-5.2.4.5/lib/rails/engine.rb:524:in `call'
2021-04-20T02:32:40.502777+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/puma-3.12.6/lib/puma/configuration.rb:227:in `call'
2021-04-20T02:32:40.502777+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/puma-3.12.6/lib/puma/server.rb:706:in `handle_request'
2021-04-20T02:32:40.502778+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/puma-3.12.6/lib/puma/server.rb:476:in `process_client'
2021-04-20T02:32:40.502778+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/puma-3.12.6/lib/puma/server.rb:334:in `block in run'
2021-04-20T02:32:40.502778+00:00 app[web.1]: [055519f9-9246-4966-8b7a-4b3016a7dee6] vendor/bundle/ruby/2.7.0/gems/puma-3.12.6/lib/puma/thread_pool.rb:135:in `block in spawn_thread'
我觉得这是我在我的应用程序中定义的中间件的东西,因为GET /auth/google_oauth2
路由没有在我的 中明确定义routes.rb
,但它在本地工作得很好。
有关更多上下文,这是我在本地运行时从 rails 服务器获得的输出:
Started GET "/auth/google_oauth2" for ::1 at 2021-04-19 21:40:04 -0500
I, [2021-04-19T21:40:04.244529 #40035] INFO -- omniauth: (google_oauth2) Request phase initiated.
有人遇到过这个问题吗?
当地路线:
$ rails routes
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#index
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
logout DELETE /logout(.:format) sessions#destroy
signup GET /signup(.:format) users#new
about GET /about(.:format) static_pages#about
help GET /help(.:format) static_pages#help
unauthed_exports GET /unauthed_exports/:sale_export_id(.:format) static_pages#unauthed_export
contacts_new GET /contacts/new(.:format) contacts#new
contacts POST /contacts(.:format) contacts#create
GET /auth/:provider/callback(.:format) sessions#omniauth
settings_user GET /users/:id/settings(.:format) users#settings
comments_user GET /users/:id/comments(.:format) users#comments
admin_user GET /users/:id/admin(.:format) users#admin
exports_user GET /users/:id/exports(.:format) users#exports
user_permission_requests GET /users/:user_id/permission_requests(.:format) permission_requests#index
POST /users/:user_id/permission_requests(.:format) permission_requests#create
new_user_permission_request GET /users/:user_id/permission_requests/new(.:format) permission_requests#new
edit_user_permission_request GET /users/:user_id/permission_requests/:id/edit(.:format) permission_requests#edit
user_permission_request GET /users/:user_id/permission_requests/:id(.:format) permission_requests#show
PATCH /users/:user_id/permission_requests/:id(.:format) permission_requests#update
PUT /users/:user_id/permission_requests/:id(.:format) permission_requests#update
DELETE /users/:user_id/permission_requests/:id(.:format) permission_requests#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
new_bike GET /bikes/new(.:format) bikes#new
all_bikes GET /bikes(.:format) bikes#index
bike GET /bikes/:make/:model/:year(.:format) bikes#show
bikes POST /bikes(.:format) bikes#create
edit_bike GET /bikes/:make/:model/:year/edit(.:format) bikes#edit
patch_bike PATCH /bikes/:make/:model/:year(.:format) bikes#update
PUT /bikes/:make/:model/:year(.:format) bikes#update
DELETE /bikes/:make/:model/:year(.:format) bikes#destroy
bike_make GET /bikes/:make(.:format) bikes#make
bike_make_model GET /bikes/:make/:model(.:format) bikes#make_model
bikes_new_populate_model_options GET /bikes/bikes/new/populate_model_options(.:format) bikes#populate_model_options
POST /bikes/:make/:model/:year/sales/pay_for_csv(.:format) charges#checkout
successful_payment GET /bikes/:make/:model/:year/sales/successful_payment(.:format) bikes#successful_payment
new_bike_review GET /bikes/:make/:model/:year/review(.:format) bike_reviews#new
final_bike_review GET /bikes/:make/:model/:year/review/final(.:format) bike_reviews#edit
POST /bikes/:bike_id/sale_search(.:format) bikes#sale_search
POST /bikes/:bike_id/export_search(.:format) sales#export_search
bike_sales GET /bikes/:make/:model/:year/sales(.:format) sales#index
new_bike_sale GET /bikes/:make/:model/:year/sales/new(.:format) sales#new
sale GET /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#show
sales POST /bikes/:make/:model/:year/sales(.:format) sales#create
edit_sale GET /bikes/:make/:model/:year/sales/:sale_id/edit(.:format) sales#edit
patch_sale PATCH /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#update
PUT /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#update
DELETE /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#destroy
bike_reviews GET /bikes/bike_reviews(.:format) bike_reviews#index
POST /bikes/bike_reviews(.:format) bike_reviews#create
bike_review GET /bikes/bike_reviews/:id(.:format) bike_reviews#show
PATCH /bikes/bike_reviews/:id(.:format) bike_reviews#update
PUT /bikes/bike_reviews/:id(.:format) bike_reviews#update
DELETE /bikes/bike_reviews/:id(.:format) bike_reviews#destroy
all_sale_reviews GET /sales/:sale_id/reviews(.:format) sale_reviews#index
new_sale_review GET /sales/:sale_id/reviews/new(.:format) sale_reviews#new
sale_review GET /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#show
sale_reviews POST /sales/:sale_id/reviews(.:format) sale_reviews#create
final_sale_review GET /sales/:sale_id/reviews/:sale_review_id/final(.:format) sale_reviews#edit
PATCH /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#update
PUT /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#update
DELETE /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#destroy
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
Heroku 路线:
$ heroku run rails routes
Running rails routes on ⬢ chaynring... up, run.2521 (Hobby)
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#index
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
logout DELETE /logout(.:format) sessions#destroy
signup GET /signup(.:format) users#new
about GET /about(.:format) static_pages#about
help GET /help(.:format) static_pages#help
unauthed_exports GET /unauthed_exports/:sale_export_id(.:format) static_pages#unauthed_export
contacts_new GET /contacts/new(.:format) contacts#new
contacts POST /contacts(.:format) contacts#create
GET /auth/:provider/callback(.:format) sessions#omniauth
settings_user GET /users/:id/settings(.:format) users#settings
comments_user GET /users/:id/comments(.:format) users#comments
admin_user GET /users/:id/admin(.:format) users#admin
exports_user GET /users/:id/exports(.:format) users#exports
user_permission_requests GET /users/:user_id/permission_requests(.:format) permission_requests#index
POST /users/:user_id/permission_requests(.:format) permission_requests#create
new_user_permission_request GET /users/:user_id/permission_requests/new(.:format) permission_requests#new
edit_user_permission_request GET /users/:user_id/permission_requests/:id/edit(.:format) permission_requests#edit
user_permission_request GET /users/:user_id/permission_requests/:id(.:format) permission_requests#show
PATCH /users/:user_id/permission_requests/:id(.:format) permission_requests#update
PUT /users/:user_id/permission_requests/:id(.:format) permission_requests#update
DELETE /users/:user_id/permission_requests/:id(.:format) permission_requests#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
new_bike GET /bikes/new(.:format) bikes#new
all_bikes GET /bikes(.:format) bikes#index
bike GET /bikes/:make/:model/:year(.:format) bikes#show
bikes POST /bikes(.:format) bikes#create
edit_bike GET /bikes/:make/:model/:year/edit(.:format) bikes#edit
patch_bike PATCH /bikes/:make/:model/:year(.:format) bikes#update
PUT /bikes/:make/:model/:year(.:format) bikes#update
DELETE /bikes/:make/:model/:year(.:format) bikes#destroy
bike_make GET /bikes/:make(.:format) bikes#make
bike_make_model GET /bikes/:make/:model(.:format) bikes#make_model
bikes_new_populate_model_options GET /bikes/bikes/new/populate_model_options(.:format) bikes#populate_model_options
POST /bikes/:make/:model/:year/sales/pay_for_csv(.:format) charges#checkout
successful_payment GET /bikes/:make/:model/:year/sales/successful_payment(.:format) bikes#successful_payment
new_bike_review GET /bikes/:make/:model/:year/review(.:format) bike_reviews#new
final_bike_review GET /bikes/:make/:model/:year/review/final(.:format) bike_reviews#edit
POST /bikes/:bike_id/sale_search(.:format) bikes#sale_search
POST /bikes/:bike_id/export_search(.:format) sales#export_search
bike_sales GET /bikes/:make/:model/:year/sales(.:format) sales#index
new_bike_sale GET /bikes/:make/:model/:year/sales/new(.:format) sales#new
sale GET /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#show
sales POST /bikes/:make/:model/:year/sales(.:format) sales#create
edit_sale GET /bikes/:make/:model/:year/sales/:sale_id/edit(.:format) sales#edit
patch_sale PATCH /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#update
PUT /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#update
DELETE /bikes/:make/:model/:year/sales/:sale_id(.:format) sales#destroy
bike_reviews GET /bikes/bike_reviews(.:format) bike_reviews#index
POST /bikes/bike_reviews(.:format) bike_reviews#create
bike_review GET /bikes/bike_reviews/:id(.:format) bike_reviews#show
PATCH /bikes/bike_reviews/:id(.:format) bike_reviews#update
PUT /bikes/bike_reviews/:id(.:format) bike_reviews#update
DELETE /bikes/bike_reviews/:id(.:format) bike_reviews#destroy
all_sale_reviews GET /sales/:sale_id/reviews(.:format) sale_reviews#index
new_sale_review GET /sales/:sale_id/reviews/new(.:format) sale_reviews#new
sale_review GET /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#show
sale_reviews POST /sales/:sale_id/reviews(.:format) sale_reviews#create
final_sale_review GET /sales/:sale_id/reviews/:sale_review_id/final(.:format) sale_reviews#edit
PATCH /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#update
PUT /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#update
DELETE /sales/:sale_id/reviews/:sale_review_id(.:format) sale_reviews#destroy
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
我的initializers/omniauth.rb
:
Rails.application.config.middleware.use OmniAuth::Builder do
client_id = Rails.application.secrets.GOOGLE_CLIENT_ID
client_secret = Rails.application.secrets.GOOGLE_CLIENT_SECRET
provider :google_oauth2, client_id, client_secret
end
5/3 更新
我已经查看了我的应用程序、Google Dev Console 和 Heroku,我可能遗漏了一些非常明显的东西,但我今天能够找到一些可能有用的信息。基本上我注意到当我在本地运行我的应用程序时,我得到:
GET /auth/google_oauth2
Location
-> 302,从响应头中重定向到 Google OAuth 屏幕
但是当我在生产中尝试这个时,我根本没有得到重定向。本地和远程的代码相同,但配置不同。我的主要问题是 Heroku 和 HTTP(本地)与 HTTPS 比较奇怪?我还将我的域添加到了 Google 开发控制台,因此应该进行配置。