使用している環境(および注意点)
環境が異なっている場合、異なる対応になる可能性がございますので
ご注意ください
下記の環境及び説明にて、間違い及び訂正箇所ございましたら、ご連絡のほどよろしくお願いいたします
・バックエンド Rails 7.2.1, (ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [x86_64-linux])
・インフラ fly.io,Google Cloud
・認証 Sorcery
・開発環境 Docker
状態
仮想環境でGoogle認証ができているという設定
デプロイ後、Googleでログインを押下すると、下記のエラーで躓く場合
下記の資料を参考に、対応してます
https://qiita.com/okada84108983/items/0c84c01b88072c004873#4-authentications%E3%83%86%E3%83%BC%E3%83%96%E3%83%ABauthentication%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90
https://qiita.com/rei-dev99/items/42358fe71680c804d19c
本番環境の適用
実際は開発環境と本番環境でそれぞれ異なるurlにリダイレクトさせる必要があります
そのため、下記のGemをインストールする必要があります
1.以下にgem 'config'を使用した方法を記載
gem 'config'
これはRailsアプリケーションで設定管理を簡単に行うためのgemです
環境ごとに異なる設定を一元管理することができ、開発環境、テスト環境、本番環境で異なる設定値を使いたい場合に非常に便利です
gemfile記述後、bundle installを実行してインストールします
2.config/settings.ymlファイル に共通の設定を書き、環境ごとの設定を書き分る
config/settings/ディレクトリ下にdevelopment.ymlとproduction.ymlを作成し、
それぞれのファイルに開発環境、本番環境のcallback_urlを記載します
config/settings/development.yml(開発環境用)
sorcery:
GOOGLE_CALLBACK_URL: 'http://localhost:3000/oauth/callback?provider=google'
config/settings/production.yml(本番環境用)
sorcery:
GOOGLE_CALLBACK_URL: 'https://your_app_url/oauth/callback?provider=google'
なお、.envについては開発環境用でログインできているのを確認した後、
本番環境のcallback_urlを記載してください
また、.gitcoreに
下記が記載されているのも確認してください
.gitcoreに記載が漏れていると、Github上に.envの更新履歴漏洩の恐れがあります
.gitcoreはjavaのカプセル化のように、プライベートとして漏らしたくないパスやキーワードを隠すためにあります
.gitcore
# 省略
# Ignore all environment files (except templates).
/.env*
!/.env*.erb
# 省略
sorcery.rbにはそれぞれの設定ができるよう下記のように記載してます
config.google.callback_url = ENV["GOOGLE_CALLBACK_URL"]
ここまでやっても残念なことに
本番環境時上記で添付した認証エラーでブロックされます
そこで思い出したのが、
画像アップロード時AWS S3使ってデプロイ環境のfly.ioにS3_ACCESS_KEY_IDとS3_SECRET_ACCESS_KEYを設定したことです
fly secrets set AWS_ACCESS_KEY_ID=your-access-key-id AWS_SECRET_ACCESS_KEY=your-secret-access-key S3_BUCKET_NAME=your-bucket-name
まとめると
GOOGLE_CLIENT_IDとGOOGLE_CLIENT_SECRETとGOOGLE_CALLBACK_URとを設定しないと、Google認証ができない
のではないかと考えました
Google APIの設定と環境変数の登録
環境変数(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_CALLBACK_URL)を fly secrets を使ってFly.ioに登録します
fly secrets set GOOGLE_CLIENT_SECRET=XXXXXXXXXXXXXXXXXXXXXXX
fly secrets set GOOGLE_CLIENT_ID=YYYYYYYYYYYYYYYYYYYYYYYYY
fly secrets set GOOGLE_CALLBACK_URL=ZZZZZZZZZZZZZZZZZZZZZZZZZZZ
環境変数(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_CALLBACK_URL)の登録について決まった順番はございません
なおプライバシーなので、環境変数の情報はダミーにしております
これらの情報がないと、アプリがGoogleのサービスにアクセスできません
Google Cloud側の設定に関しては下記において詳しく書かれているので、ご確認ください
https://zenn.dev/shunjuio/articles/b9ffb6565b7409
登録成功したら、下記コマンドで登録されているかどうかを確認します
下記コマンドを打つと、情報が一覧として確認できます
fly secrets list
#以下省略
GOOGLE_CALLBACK_URL XXXXXXXXXXXXXXXX 30s ago
GOOGLE_CLIENT_ID YYYYYYYYYYYYYYYY 2m1s ago
GOOGLE_CLIENT_SECRET ZZZZZZZZZZZZZZZZ 49s ago
詳しく説明すると、一番左から環境変数名、要約番号、生成月日となります
デプロイ再実行
fly.ioの環境で再度デプロイしなおします
fly deploy
以上です
同様の事態に遭って挫折している人が解決できるのを願っております