Rails5.2においてTwitterアカウントで会員登録できる機能を作成しようとしています。
Dockerの開発環境ではTwitterの連携承認ページ(アクセストークンの発行直前ページ)へ遷移すると401エラーが発生してTwitter APIへの認証が上手くいきませんでした。
しかし、同アプリをHeorkuにアップロードして試してみたところ、Heroku上では問題なく認証が通りました。
HerokuへはDocker imageではなく、Docker環境で作成したファイルをPushしています。
ひとまず、私が既に確認して(もしくは確試して)みたことは
- Twitter APIを利用するためのAPI KEYとAPI SECRET KEYの正誤確認(DockerのRails上で該当の環境変数を出力して確認しました)
- コールバックURLの正誤確認(http://localhost:ポート番号/auth/twitter/callbackだけでなく、http://127.0.0.1:ポート番号/auth/twitter/callbackもCallback URLとして追加しました)
- Docker上のローカルサーバーをProductionで起動して確認(RAILS_ENVをDockerのRails上で出力してHerokuでの値と同じになっていることを確認しました)
- Dockerコンテナ(Web)上での時刻がホスト端末とほぼ同じ時刻(JST)になっていることを確認(全く同じ時刻になっているかどうかを確認する方法が分かりませんでした)
といった内容になります。
Docker関連のファイルは以下の通りです。(ローカルサーバーはdevelopmentの状態で起動しています)
Dockerfile
FROM ruby:2.5.3 RUN apt-get update -qq && apt-get install -y build-essential nodejs RUN mkdir /app WORKDIR /app COPY Gemfile /app/Gemfile COPY Gemfile.lock /app/Gemfile.lock RUN bundle install COPY . /app
docker-compose.yml
version: '3' services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app ports: - 3000:3000 depends_on: - db tty: true stdin_open: true environment: - "TZ=Asia/Tokyo" - TWITTER_KEY='〜〜〜' - TWITTER_SECRET='〜〜〜' db: image: postgres:10.6 volumes: - db-volume:/var/lib/postgres volumes: db-volume:
認証にはomniauthとomniauth-twitterを利用しています。
deviseは利用していません。
Railsファイルの作成は下記記事に準拠しています。
Railsでomniauth-twitterを使ってTwitter認証をする(2018/10)
Dockerだと上手くいかない理由を探りたいのですが、何が原因か、もしくは何を調べるべきかお分かりになればお教え頂けると幸いです。
よろしくお願いします。
あなたの回答
tips
プレビュー