質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

636閲覧

Twitterログイン(oauth認証)機能でOAuth::Unauthorized (401 Unauthorized):が出る。

Giants

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

1クリップ

投稿2023/04/18 01:07

編集2023/04/18 14:22

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • 本番環境でもTwitterログインができるようにしたい

前提

Rails6系で、Twitterログイン機能を実装中ですが、
本番環境になると「We're sorry, but something went wrong.」
とエラー画面になってしまいます。

なお、開発環境では問題なくログインできているためなぜ本番環境のみエラーになるのかが分からない状態です。

発生している問題・エラーメッセージ

heroku.logs

12023-04-17T14:05:06.363818+00:00 app[web.1]: I, [2023-04-17T14:05:06.363757 #2] INFO -- : [95d9019e-b882-4126-a7af-5da54f737b56] Started GET "/oauth/twitter" for 58.85.224.15 at 2023-04-17 14:05:06 +0000 22023-04-17T14:05:06.364520+00:00 app[web.1]: I, [2023-04-17T14:05:06.364480 #2] INFO -- : [95d9019e-b882-4126-a7af-5da54f737b56] Processing by OauthsController#oauth as HTML 32023-04-17T14:05:06.364542+00:00 app[web.1]: I, [2023-04-17T14:05:06.364526 #2] INFO -- : [95d9019e-b882-4126-a7af-5da54f737b56] Parameters: {"provider"=>"twitter"} 42023-04-17T14:05:06.483043+00:00 app[web.1]: I, [2023-04-17T14:05:06.482980 #2] INFO -- : [95d9019e-b882-4126-a7af-5da54f737b56] Completed 500 Internal Server Error in 118ms (ActiveRecord: 0.0ms | Allocations: 4755) 52023-04-17T14:05:06.483462+00:00 app[web.1]: F, [2023-04-17T14:05:06.483428 #2] FATAL -- : [95d9019e-b882-4126-a7af-5da54f737b56] 62023-04-17T14:05:06.483463+00:00 app[web.1]: [95d9019e-b882-4126-a7af-5da54f737b56] OAuth::Unauthorized (401 Unauthorized): 72023-04-17T14:05:06.483464+00:00 app[web.1]: [95d9019e-b882-4126-a7af-5da54f737b56] 82023-04-17T14:05:06.483464+00:00 app[web.1]: [95d9019e-b882-4126-a7af-5da54f737b56] app/controllers/oauths_controller.rb:9:in `oauth' 92023-04-17T14:05:06.489159+00:00 heroku[router]: at=info method=GET path="/oauth/twitter" host=www.○○○○○○○○○○○○request_id=95d9019e-b882-4126-a7af-5da54f737b56 fwd="58.85.224.15" dyno=web.1 connect=0ms service=128ms status=500 bytes=1891 protocol=https

該当のソースコード

oauths_conttoller.rb

1class OauthsController < ApplicationController 2 skip_before_action :require_login 3 4 def oauth 5 login_at(auth_params[:provider]) 6 end 7 8 def callback 9 provider = auth_params[:provider] 10 #binding.pry 11 if auth_params[:denied].present? 12 redirect_to posts_path, success: '指定アカウントでログインしました' 13 return 14 end 15 16 begin 17 create_user_from(provider) unless (@user = login_from(provider)) 18 redirect_to posts_path, success: "指定アカウントでログインしました" 19 20 rescue StandardError 21 redirect_to login_path, danger: "指定アカウントでのログインに失敗しました" 22 end 23 end 24 25 private 26 27 def auth_params 28 params.permit(:code, :provider, :denied, :oauth_token, :oauth_verifier) 29 end 30 31 def create_user_from(provider) 32 @user = create_from(provider) 33 reset_session 34 auto_login(@user) 35 end 36 37end 38

development.yml

1sorcery: 2 twitter_callback_url: 'http://127.0.0.1:3000/oauth/callback?provider=twitter'

production.yml

1sorcery: 2 twitter_callback_url: 'https://www.○○○○○○○○○○○○○/oauth/callback?provider=twitter'

schema.rb

1create_table "authentications", force: :cascade do |t| 2 t.integer "user_id", null: false 3 t.string "provider", null: false 4 t.string "uid", null: false 5 t.datetime "created_at", precision: 6, null: false 6 t.datetime "updated_at", precision: 6, null: false 7 t.index ["provider", "uid", "user_id"], name: "index_authentications_on_provider_and_uid_and_user_id" 8 end

sorcery.rb

1config.twitter.key = ENV['TWITTER_API_KEY'] 2 config.twitter.secret = ENV['TWITTER_API_KEY_SECRET'] 3 config.twitter.callback_url = Settings.sorcery[:twitter_callback_url] 4 config.twitter.user_info_path = "/1.1/account/verify_credentials.json?include_email=true" 5 config.twitter.user_info_mapping = { 6 email: 'email', 7 name: 'name', 8 introduction: 'description' 9 }

user.rb

1class User < ApplicationRecord 2 authenticates_with_sorcery! 3 has_many :authentications, dependent: :destroy 4 accepts_nested_attributes_for :authentications 5    以下省略

authentication.rb

1class Authentication < ApplicationRecord 2 belongs_to :user 3end

routes.rb

1 post "oauth/callback", to: "oauths#callback" 2 get "oauth/callback", to: "oauths#callback" 3 get "oauth/:provider", to: "oauths#oauth", as: :auth_at_provider

env.

1TWITTER_API_KEY='◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯' 2TWITTER_API_KEY_SECRET='◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯◯'

試したこと

https://qiita.com/zakirun/items/da012e6d8f7282c3c912
https://blog.aiandrox.com/posts/tech/2020/03/29/
https://teratail.com/questions/240614?link=qa_related_sp

上記のサイトを参考にしたところ、
Twitter Developer PortalのリダイレクトURLの設定が関係しているとの内容をよく見かけたため、色々と変更してみましたがエラーが解消されない状況でございます。

補足情報(FW/ツールのバージョンなど)

Rails 6.1.7
Ruby 3.1.3

shinoharat👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinoharat

2023/04/18 02:47 編集

本番環境で bundle exec rails runner -e production 'puts ENV["TWITTER_API_KEY"]; puts ENV["TWITTER_API_KEY_SECRET"]' と入力したら、ちゃんとキーが表示されますか?
Giants

2023/04/18 03:21

コメントありがとうございます! 教えていただきましたコマンドを入力したところ、下記のようなエラーになりました。 bundle exec rails runner -e production 'puts ENV["TWITTER_API_KEY"]; puts ENV["TWITTER_API_KEY_SECRET"]' /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/bundler/rubygems_integration.rb:280:in `block (2 levels) in replace_gem': Error loading the 'postgresql' Active Record adapter. Missing a gem it depends on? pg is not part of the bundle. Add it to your Gemfile. (LoadError) from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/postgresql_adapter.rb:3:in `<main>' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/dependencies.rb:332:in `block in require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/dependencies.rb:299:in `load_dependency' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/dependencies.rb:332:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:1205:in `resolve_pool_config' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activerecord-6.1.7.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:1046:in `establish_connection' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activerecord-6.1.7.2/lib/active_record/connection_handling.rb:52:in `establish_connection' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activerecord-6.1.7.2/lib/active_record/railtie.rb:222:in `block (2 levels) in <class:Railtie>' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/lazy_load_hooks.rb:71:in `class_eval' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/lazy_load_hooks.rb:71:in `block in execute_hook' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/lazy_load_hooks.rb:61:in `with_execution_control' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/lazy_load_hooks.rb:66:in `execute_hook' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/lazy_load_hooks.rb:43:in `block in on_load' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/lazy_load_hooks.rb:42:in `each' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/lazy_load_hooks.rb:42:in `on_load' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activerecord-6.1.7.2/lib/active_record/railtie.rb:217:in `block in <class:Railtie>' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/lib/rails/initializable.rb:32:in `instance_exec' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/lib/rails/initializable.rb:32:in `run' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/lib/rails/initializable.rb:61:in `block in run_initializers' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:228:in `block in tsort_each' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:431:in `each_strongly_connected_component_from' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:349:in `block in each_strongly_connected_component' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:347:in `each' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:347:in `call' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:347:in `each_strongly_connected_component' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:226:in `tsort_each' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/tsort.rb:205:in `tsort_each' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/lib/rails/initializable.rb:60:in `run_initializers' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/railties-6.1.7.2/lib/rails/application.rb:391:in `initialize!' from /Users/mr.d/ポートフォリオ_就活用/Runteq_Portfolio/WHISKER/config/environment.rb:5:in `<main>' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/dependencies.rb:332:in `block in require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/dependencies.rb:299:in `load_dependency' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7.2/lib/active_support/dependencies.rb:332:in `require' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/spring-4.1.1/lib/spring/application.rb:107:in `preload' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/spring-4.1.1/lib/spring/application.rb:166:in `serve' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/spring-4.1.1/lib/spring/application.rb:148:in `block in run' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/spring-4.1.1/lib/spring/application.rb:142:in `loop' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/spring-4.1.1/lib/spring/application.rb:142:in `run' from /Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/gems/3.1.0/gems/spring-4.1.1/lib/spring/application/boot.rb:19:in `<top (required)>' from <internal:/Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from <internal:/Users/mr.d/.rbenv/versions/3.1.3/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require' from -e:1:in `<main>'
Giants

2023/04/18 03:31

: Error loading the 'postgresql' Active Record adapter. Missing a gem it depends on? pg is not part of the bundle. Add it to your Gemfile. (LoadError) 上記のエラーにて、production環境でpgがインストールされていない趣旨のエラーが表示されていると考えますが、gemfile上ではdevelopment環境=splite production環境=pgにてbundle installをしております。 [gemfile] ruby '3.1.3' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main' gem 'rails', '~> 6.1.7', '>= 6.1.7.2' # Use sqlite3 as the database for Active Record #gem 'sqlite3', '~> 1.4' # Use Puma as the app server gem 'puma', '~> 5.0' # Use SCSS for stylesheets gem 'sass-rails', '>= 6' # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker gem 'webpacker', '~> 5.0' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.7' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use Active Model has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Active Storage variant # gem 'image_processing', '~> 1.2' # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.4', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'capybara' gem 'factory_bot_rails' gem 'rspec-rails' gem 'webdrivers' gem 'faker' gem "sqlite3" end group :production do # Use PstgreSQL as the database for Active Record gem 'pg' end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 4.1.0' # Display performance information such as SQL time and flame graphs for each request in your browser. # Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md gem 'rack-mini-profiler', '~> 2.0' gem 'listen', '~> 3.3' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'rubocop', require: false gem 'rubocop-rails', require: false gem 'bullet' gem 'better_errors' gem 'binding_of_caller' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'font-awesome-sass', '~> 5.11.2' gem 'jquery-rails' gem 'sorcery' gem 'pry-byebug' gem 'rails-i18n' gem 'enum_help' #画像を投稿するためのgem gem 'carrierwave' #画像のサイズ調整のためのgem gem 'mini_magick' gem 'kaminari' gem 'ransack', '~> 3.2', '>= 3.2.1' #AWSで画像保存でするgem gem 'fog-aws' gem "aws-sdk-s3", require: false #環境変数を管理するgem gem 'dotenv-rails' #googleの位置情報機能のgem gem 'geocoder' gem 'gon' gem 'google_places' #認証機能のgem gem 'omniauth-google-oauth2' gem 'omniauth' gem 'config' gem 'googleauth' gem 'omniauth-twitter'
shinoharat

2023/04/18 04:13

ローカル環境ではなく、本番環境で実行してください。 heroku を使っているなら $ heroku login $ heroku run rails runner -e production 'puts ENV["TWITTER_API_KEY"]; puts ENV["TWITTER_API_KEY_SECRET"]' みたいな感じです。
Giants

2023/04/18 05:22 編集

ありがとうございます! 教えていただきましたとおり、 下記コマンドを打ったところ、API KEYとSECRET KEYは表示されておりました。 ただ、エラーは解消されておらず、 heroku logsコマンドで調べても質問させて頂きているエラー文が変わらず出ている感じでございます。 個人的にはTwitter developer portal内の[Callback URI / Redirect URL (required) ]設定でURLリダイレクト後のURLに何らかの記述ミスがあるのではないかと考えております。 mr.d@misutaDnoMacBook-Air WHISKER % heroku login heroku: Press any key to open up the browser to login or q to exit: Logging in... done mr.d@misutaDnoMacBook-Air WHISKER % heroku run rails runner -e production 'puts ENV["TWITTER_API_KEY"]; puts ENV["TWITTER_API_KEY_SECRET"]' › Warning: env flag production appears invalid. Avoid using ';' in values. Running rails runner "puts ENV[\"TWITTER_API_KEY\"]; puts ENV[\"TWITTER_API_KEY_SECRET\"]" on ⬢ whisker... up, run.6551 (Eco) TWITTER_API_KEYが表示されております! TWITTER_API_KEY_SECRETが表示されております!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問