Closed taiti101112 closed 1 month ago
UsersController内の処理が原因なのであれば下記のようにcorrect_userを使わずにcurrent_user起点でチェックするようにするとよいのではないでしょうか?
class UsersController < ApplicationController
before_action :authenticate_user!, except: [:new, :create]
def show
@user = User.find_by(id: current_user.id)
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
お疲れさまです。 Userコントローラを以下のように変更して試してみましたが、ログインすることができませんでした。 また、開発環境だとログインできて、本番環境だとログインできないことから本番環境ではログインしたユーザーがリダイレクトした際にセッション等のユーザーに付帯する情報が抜けることでログイン画面に戻されてるのだと考えています。
また、本日はエラーの解決のために以下のことを試しましたが解決には至りませんでした。 このほかに着目すべき点などがあれば教えていただけたら幸いです。 よろしくお願いいたします。
class UsersController < ApplicationController
before_action :authenticate_user!, except: [:new, :create]
before_action :set_user, only: [:show, :edit, :update, :destroy]
before_action :correct_user, only: [:show, :edit, :update, :destroy]
def show
end
private
def user_params
params.require(:user).permit(:name, :email)
end
def set_user
@user = User.find(params[:id])
end
def correct_user
redirect_to(root_path) unless @user && @user == current_user
end
end
本番環境でのみ、ログインすることができずログイン画面にリダイレクトされてします。 ログを確認したところログイン自体は成功していて、そこからユーザー詳細ページにリダイレクトされる際に401 Unauthorizedエラーが発生してしまいます。
こちらからログイン自体は成功していてログイン後に意図しないページにリダイレクトされてしまうと解釈していたのですが、ログイン自体出来ていないということでしょうか? 前提が変わったのであればその旨記載してください
また、試したことは何の検証のために試したのか、何を参考に実行したのかを共有していただきますようお願いします
また、ログインとログイン機能が混同されて書かれているのか状況が把握しづらいです 下記状況の整理をお願いします ログイン出来ているのか、出来ていないのか、何のメソッドやコードや仕様によってログイン画面にリダイレクトされているのか等分解して記載おねがします その際、gemの中に該当のコードがあるのであれば公式ドキュメント等から該当の記載を探して軽く調べてみると良いと思います
ログインしたユーザーがリダイレクトした際にセッション等のユーザーに付帯する情報が抜けることでログイン画面に戻されてる
また、私がしたコメントに対して検証したのかしていないのか、そもそも関係のないものなのか等どのような判断や対処を行ったのか書いていただかないと無視されたみたいに思ってしまいます
ログインできているかについてですが、厳密に言えばログインできておりません。 また、ログインできない事象はherokuにデプロイした本番環境でのみ起こっております 以下に詳細を記載しましたのでご確認いただければ幸いです。 よろしくお願いいたします。
まず、ログイン画面でユーザーの情報を入力してログインボタンを押下するとログインに成功し、ユーザー詳細ページ(/user/4)にリダイレクトされます。 しかし、このユーザー詳細ページにリダイレクトされた際にcorrect_user メソッドで認証エラー「401 Unauthorized」が発生し、ログインが取り消され、認証が失敗した際のdeviseのデフォルト機能によりログイン画面にリダイレクトされてしまいます。 そして最終的にはログイン画面にリダイレクトされログインできていない状態で処理が終了しています。 原因としてはログイン後にユーザー詳細ページにリダイレクトされた際にcorrect_user メソッドで認証エラー(401 Unauthorized)が発生しているからになります。 ただ、認証エラーが起きてしまう詳細な原因は現在も特定できておらず、セッションの設定やアクセス権限が問題だと考えております。
ログイン画面でユーザーの情報を入力してログインボタンを押下
ログイン成功
ユーザー詳細ページにリダイレクト
correct_user メソッドで認証エラー(401 Unauthorized)
認証されていないor ユーザーが一致しないためログイン成功が取り消される
認証できなかった際のdeviseのデフォルトの処理によりログイン画面にリダイレクト
ユーザー詳細ページにリダイレクトした際にクッキーが存在しないことからエラーが発生しているのではと考えたから。
古いキャッシュを保持していることで認証が通らないのではないかと考えたから。
chromeのキャッシュがクリアされていなくてエラーが発生しているのではと考えたから。 結果はsafariの場合は「ActionController::InvalidAuthenticityToken」が発生し、chromeはログイン処理は行えていてユーザー詳細ページにリダイレクトする際にエラーが発生していたのに対して、safariはログイン処理自体が行えていませんでした。 なぜブラウザごとにエラーの内容が異なるのかは現在調査中です。
SECRET_KEY_BASEはクッキーやCSRFトークンの生成などセキュリティ機能に関わっているものなので存在しないと認証が行えないと考えたから。
クッキーが存在しないことが認証エラーにつながっていると考え、laxからnoenに変更することで全てのリクエストに対してクッキーが送信されるようにするため。
ブラウザが古いキャッシュを保持していることで認証が通らないのではないかと考えたから。
chromeのログ
2024-09-09T02:29:46.905620+00:00 app[web.1]: I, [2024-09-09T02:29:46.905565 #2] INFO -- : [85a2ee72-9383-4e0b-b1ab-a0bc4d833c16] Started POST "/users/sign_in" for 106.72.156.98 at 2024-09-09 02:29:46 +0000
2024-09-09T02:29:46.906248+00:00 app[web.1]: I, [2024-09-09T02:29:46.906213 #2] INFO -- : [85a2ee72-9383-4e0b-b1ab-a0bc4d833c16] Processing by Users::SessionsController#create as HTML
2024-09-09T02:29:46.906275+00:00 app[web.1]: I, [2024-09-09T02:29:46.906258 #2] INFO -- : [85a2ee72-9383-4e0b-b1ab-a0bc4d833c16] Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"kota", "email"=>"kkkk@jp", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"ログイン"}
2024-09-09T02:29:47.137678+00:00 app[web.1]: I, [2024-09-09T02:29:47.137610 #2] INFO -- : [85a2ee72-9383-4e0b-b1ab-a0bc4d833c16] Redirected to https://tcgplace-9f88c4df2f96.herokuapp.com/users/4
2024-09-09T02:29:47.137733+00:00 app[web.1]: I, [2024-09-09T02:29:47.137714 #2] INFO -- : [85a2ee72-9383-4e0b-b1ab-a0bc4d833c16] Completed 303 See Other in 231ms (ActiveRecord: 0.6ms | Allocations: 1097)
2024-09-09T02:29:47.138957+00:00 heroku[router]: at=info method=POST path="/users/sign_in" host=tcgplace-9f88c4df2f96.herokuapp.com request_id=85a2ee72-9383-4e0b-b1ab-a0bc4d833c16 fwd="106.72.156.98" dyno=web.1 connect=1ms service=235ms status=303 bytes=1187 protocol=https
2024-09-09T02:29:47.330246+00:00 heroku[router]: at=info method=GET path="/users/4" host=tcgplace-9f88c4df2f96.herokuapp.com request_id=41a3d190-2881-474f-ab5c-94968ed7ee59 fwd="106.72.156.98" dyno=web.1 connect=0ms service=4ms status=302 bytes=1171 protocol=https
2024-09-09T02:29:47.327056+00:00 app[web.1]: I, [2024-09-09T02:29:47.327004 #2] INFO -- : [41a3d190-2881-474f-ab5c-94968ed7ee59] Started GET "/users/4" for 106.72.156.98 at 2024-09-09 02:29:47 +0000
2024-09-09T02:29:47.327604+00:00 app[web.1]: I, [2024-09-09T02:29:47.327576 #2] INFO -- : [41a3d190-2881-474f-ab5c-94968ed7ee59] Processing by UsersController#show as HTML
2024-09-09T02:29:47.327622+00:00 app[web.1]: I, [2024-09-09T02:29:47.327608 #2] INFO -- : [41a3d190-2881-474f-ab5c-94968ed7ee59] Parameters: {"id"=>"4"}
2024-09-09T02:29:47.328594+00:00 app[web.1]: I, [2024-09-09T02:29:47.328567 #2] INFO -- : [41a3d190-2881-474f-ab5c-94968ed7ee59] Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms | Allocations: 373)
2024-09-09T02:29:47.517925+00:00 app[web.1]: I, [2024-09-09T02:29:47.517867 #2] INFO -- : [dd1b5aa6-4e95-45c4-94cd-78cdebae34d1] Started GET "/users/sign_in" for 106.72.156.98 at 2024-09-09 02:29:47 +0000
2024-09-09T02:29:47.518605+00:00 app[web.1]: I, [2024-09-09T02:29:47.518564 #2] INFO -- : [dd1b5aa6-4e95-45c4-94cd-78cdebae34d1] Processing by Users::SessionsController#new as HTML
2024-09-09T02:29:47.521410+00:00 app[web.1]: I, [2024-09-09T02:29:47.521344 #2] INFO -- : [dd1b5aa6-4e95-45c4-94cd-78cdebae34d1] Rendered users/sessions/new.html.erb within layouts/application (Duration: 1.3ms | Allocations: 1055)
2024-09-09T02:29:47.522594+00:00 app[web.1]: I, [2024-09-09T02:29:47.522550 #2] INFO -- : [dd1b5aa6-4e95-45c4-94cd-78cdebae34d1] Rendered layout layouts/application.html.erb (Duration: 2.5ms | Allocations: 2229)
2024-09-09T02:29:47.522747+00:00 app[web.1]: I, [2024-09-09T02:29:47.522724 #2] INFO -- : [dd1b5aa6-4e95-45c4-94cd-78cdebae34d1] Completed 200 OK in 4ms (Views: 3.0ms | ActiveRecord: 0.0ms | Allocations: 2930)
2024-09-09T02:29:47.524238+00:00 heroku[router]: at=info method=GET path="/users/sign_in" host=tcgplace-9f88c4df2f96.herokuapp.com request_id=dd1b5aa6-4e95-45c4-94cd-78cdebae34d1 fwd="106.72.156.98" dyno=web.1 connect=1ms service=7ms status=200 bytes=8533 protocol=https
safariのログ
2024-09-09T04:56:41.298563+00:00 heroku[router]: at=info method=POST path="/users/sign_in" host=tcgplace-9f88c4df2f96.herokuapp.com request_id=2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc fwd="106.72.156.98" dyno=web.1 connect=0ms service=3ms status=422 bytes=1960 protocol=https
2024-09-09T04:56:41.295698+00:00 app[web.1]: I, [2024-09-09T04:56:41.295632 #2] INFO -- : [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] Started POST "/users/sign_in" for 106.72.156.98 at 2024-09-09 04:56:41 +0000
2024-09-09T04:56:41.296300+00:00 app[web.1]: I, [2024-09-09T04:56:41.296265 #2] INFO -- : [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] Processing by Users::SessionsController#create as HTML
2024-09-09T04:56:41.296326+00:00 app[web.1]: I, [2024-09-09T04:56:41.296303 #2] INFO -- : [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"kota", "email"=>"kkkk@jp", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"ログイン"}
2024-09-09T04:56:41.296828+00:00 app[web.1]: W, [2024-09-09T04:56:41.296799 #2] WARN -- : [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] Can't verify CSRF token authenticity.
2024-09-09T04:56:41.297009+00:00 app[web.1]: I, [2024-09-09T04:56:41.296984 #2] INFO -- : [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] Completed 422 Unprocessable Entity in 1ms (ActiveRecord: 0.0ms | Allocations: 280)
2024-09-09T04:56:41.297593+00:00 app[web.1]: F, [2024-09-09T04:56:41.297561 #2] FATAL -- : [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc]
2024-09-09T04:56:41.297593+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] ActionController::InvalidAuthenticityToken (Can't verify CSRF token authenticity.):
2024-09-09T04:56:41.297594+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc]
2024-09-09T04:56:41.297596+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal/request_forgery_protection.rb:253:in `handle_unverified_request'
2024-09-09T04:56:41.297597+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal/request_forgery_protection.rb:286:in `handle_unverified_request'
2024-09-09T04:56:41.297597+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] devise (4.9.4) lib/devise/controllers/helpers.rb:257:in `handle_unverified_request'
2024-09-09T04:56:41.297597+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal/request_forgery_protection.rb:275:in `verify_authenticity_token'
2024-09-09T04:56:41.297597+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:400:in `block in make_lambda'
2024-09-09T04:56:41.297597+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:199:in `block (2 levels) in halting'
2024-09-09T04:56:41.297598+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/abstract_controller/callbacks.rb:34:in `block (2 levels) in <module:Callbacks>'
2024-09-09T04:56:41.297598+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:200:in `block in halting'
2024-09-09T04:56:41.297598+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:595:in `block in invoke_before'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:595:in `each'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:595:in `invoke_before'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:116:in `block in run_callbacks'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:138:in `run_callbacks'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/abstract_controller/callbacks.rb:233:in `process_action'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal/rescue.rb:23:in `process_action'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
2024-09-09T04:56:41.297600+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/notifications.rb:206:in `block in instrument'
2024-09-09T04:56:41.297601+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
2024-09-09T04:56:41.297601+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/notifications.rb:206:in `instrument'
2024-09-09T04:56:41.297601+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
2024-09-09T04:56:41.297601+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
2024-09-09T04:56:41.297601+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activerecord (7.0.8.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
2024-09-09T04:56:41.297601+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/abstract_controller/base.rb:151:in `process'
2024-09-09T04:56:41.297601+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionview (7.0.8.1) lib/action_view/rendering.rb:39:in `process'
2024-09-09T04:56:41.297602+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal.rb:188:in `dispatch'
2024-09-09T04:56:41.297602+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_controller/metal.rb:251:in `dispatch'
2024-09-09T04:56:41.297602+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
2024-09-09T04:56:41.297602+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/routing/route_set.rb:32:in `serve'
2024-09-09T04:56:41.297602+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
2024-09-09T04:56:41.297602+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
2024-09-09T04:56:41.297604+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
2024-09-09T04:56:41.297604+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/journey/router.rb:32:in `each'
2024-09-09T04:56:41.297604+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/journey/router.rb:32:in `serve'
2024-09-09T04:56:41.297604+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/routing/route_set.rb:852:in `call'
2024-09-09T04:56:41.297604+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] warden (1.2.9) lib/warden/manager.rb:36:in `block in call'
2024-09-09T04:56:41.297604+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] warden (1.2.9) lib/warden/manager.rb:34:in `catch'
2024-09-09T04:56:41.297604+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] warden (1.2.9) lib/warden/manager.rb:34:in `call'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/tempfile_reaper.rb:15:in `call'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/etag.rb:27:in `call'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/conditional_get.rb:40:in `call'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/head.rb:12:in `call'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/http/content_security_policy.rb:36:in `call'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/session/abstract/id.rb:266:in `context'
2024-09-09T04:56:41.297605+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/session/abstract/id.rb:260:in `call'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/cookies.rb:704:in `call'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/callbacks.rb:99:in `run_callbacks'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] railties (7.0.8.1) lib/rails/rack/logger.rb:40:in `call_app'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] railties (7.0.8.1) lib/rails/rack/logger.rb:25:in `block in call'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/tagged_logging.rb:99:in `block in tagged'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/tagged_logging.rb:37:in `tagged'
2024-09-09T04:56:41.297606+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] activesupport (7.0.8.1) lib/active_support/tagged_logging.rb:99:in `tagged'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] railties (7.0.8.1) lib/rails/rack/logger.rb:25:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] request_store (1.7.0) lib/request_store/middleware.rb:19:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/method_override.rb:24:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/runtime.rb:22:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/static.rb:23:in `call'
2024-09-09T04:56:41.297607+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] rack (2.2.9) lib/rack/sendfile.rb:110:in `call'
2024-09-09T04:56:41.297608+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/ssl.rb:77:in `call'
2024-09-09T04:56:41.297608+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] actionpack (7.0.8.1) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
2024-09-09T04:56:41.297608+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] railties (7.0.8.1) lib/rails/engine.rb:530:in `call'
2024-09-09T04:56:41.297610+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] puma (5.6.8) lib/puma/configuration.rb:252:in `call'
2024-09-09T04:56:41.297610+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] puma (5.6.8) lib/puma/request.rb:77:in `block in handle_request'
2024-09-09T04:56:41.297611+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] puma (5.6.8) lib/puma/thread_pool.rb:340:in `with_force_shutdown'
2024-09-09T04:56:41.297611+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] puma (5.6.8) lib/puma/request.rb:76:in `handle_request'
2024-09-09T04:56:41.297611+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] puma (5.6.8) lib/puma/server.rb:443:in `process_client'
2024-09-09T04:56:41.297611+00:00 app[web.1]: [2a7b6fe8-b49f-48bd-a7a6-dbf32a7b02bc] puma (5.6.8) lib/puma/thread_pool.rb:147:in `block in spawn_thread'
以前教えていただいたことに対する検証結果の報告をしておらず大変申し訳ございませんでした。 教えていただいたことを参考にして、Userコントローラーのshowアクションにおけるユーザーの取得を「@user = User.find_by(id: current_user.id)」から「 @user = current_user」にして検証を行いました。 検証しようと思った理由についてですがcurrent_userはdeviseのメソッドのためfind_byメソッドよりも認証が通りやすくなるのではないかと考えたからになります。 また結果についてですがログに変化はなく同じエラーが出ております。
変更前
class UsersController < ApplicationController
before_action :authenticate_user!, except: [:new, :create]
before_action :set_user, only: [:show, :edit, :update, :destroy]
before_action :correct_user, only: [:show, :edit, :update, :destroy]
def show
@user = User.find_by(id: current_user.id)
end
private
def user_params
params.require(:user).permit(:name, :email)
end
def set_user
@user = User.find(params[:id])
end
def correct_user
# `@user` が存在し、かつ現在のユーザーと一致するかを確認
redirect_to(root_path) unless @user && @user == current_user
end
end
変更後
class UsersController < ApplicationController
before_action :authenticate_user!, except: [:new, :create]
def show
@user = current_user
end
private
def user_params
params.require(:user).permit(:name, :email)
end
end
ご回答いただいている下記のエラーが起きる流れですが、別途ご回答いただいているコントローラーの変更の検証でcorrect_userを使わない形で検証いただいているのでcorrect_user メソッドで認証エラー(401 Unauthorized)
のところの推測が違っていることが検証できているかなと思いますがいかがですか?また、検証する際にアレンジを加える場合はアレンジ前のものも検証すると良い思いますよ
元のコードではcurrent_userの値がnilの場合は例外が発生するようになっているので別の検証も出来たかなと思います
https://github.com/taiti101112/portfolio/issues/149#issuecomment-2337192235
エラーが起こる際の処理の流れ
ログイン画面でユーザーの情報を入力してログインボタンを押下
ログイン成功
ユーザー詳細ページにリダイレクト
correct_user メソッドで認証エラー(401 Unauthorized)
認証されていないor ユーザーが一致しないためログイン成功が取り消される
認証できなかった際のdeviseのデフォルトの処理によりログイン画面にリダイレクト
おっしゃる通り、current_userメソッドを使用しているのとしていないパターンで検証しておりますのでcurrent_userが認証されないためにログインできないというのは誤りでした。 そのため、他に原因として考えられるのはセッション関連の情報がユーザーに不足しているからだと思います。 つきましてはこのような場合にどのようにして原因の調査を行えば良いのかなどを教えていただけますでしょうか?
また、検証に関してですがUserコントローラーの変更前とあとでそれぞれ検証をしており、ログは変更前・変更後ともに同じものでした。
よろしくお願いいたします。
まずはエラーが起こる際の処理の流れの推測が違っていたことに気づけたと思うので改めて、どこでエラーが起きているのかを改めて突き止めてください
エラー対応の際にはどこの何でエラーが起きているのかを明確にすることが1番大切です
その上でloginが出来ていないのであれば何を根拠にログインが出来ていないのかを示してください deviseを使っている場合はセッションが存在してなければログインが出来ておらずcurrent_userの値がnilになったり、ログインしているかどうかを判定するSorceryのlogged_inメソッドのようなものがあればviewページに埋め込んで値を確認したりすると出来るでしょう
上記の検証でLogin出来ていないということに対して根拠を示せてはじめてログイン出来ない原因の調査に入れます
開発環境ではログインできて、本番環境でのみログイン出来ないのであればまずは自分が実装した設定に何か問題がないか、参照した公式以外のドキュメントで扱っているgemのバージョンが違いすぎていないか、deviseのGitHubのissueに自分と同じような状況の人が書いたissueがないかを探していくと良いかなと思います
ご返信ありがとうございます。 承知致しました。
実装したいもの・解決したいもの 本番環境で新規登録とログインができるようにしたい
エラー内容 本番環境でのみ、ログインすることができずログイン画面にリダイレクトされてします。 ログを確認したところログイン自体は成功していて、そこからユーザー詳細ページにリダイレクトされる際に401 Unauthorizedエラーが発生してしまいます。
エラーの意味とエラー内容から推測される原因 ログインが成功してからユーザー詳細画面にリダイレクトされる際に、ログインしたユーザーのセッション情報が認識されていないため、ログインしたユーザーではないと判定されてログイン画面にリダイレクトされているのだと推測しています。 そのため、リダイレクトなどで画面が遷移してもユーザーが正しいセッション情報を保持できればエラーは解決することができると思います。 また、ネットで記事を検索したものの本番環境でdeviseを使っていてセッションが原因でログインできないというものがなく、どのように解決すれば良いのかがわかりませんでのどこに着目すれば良いのかなどを教えていただけますでしょうか? よろしくお願いいたします。
エラーを解決するために調べた資料 【Rails】ログイン機能を実装する上で必要不可欠な「Session」について解説
自分と似たような状況の記事がなかったのでチャットGPTが原因に挙げた箇所がどのような働きをしているのかを調べて以下のように変更を加えましたがうまくいきませんでした
session_store.rb
importmap.rb
devise.rb
production.rb
ログ