前提・実現したいこと
RailsアプリをHerokuにデプロイし、heroku run rails db:migrate
も済ませました。
その後ステージング環境で動作確認をする為、ユーザー新規登録とログインを試みました。しかし同じログイン画面にリダイレクトされるだけで、トップページへ遷移してくれません。
パスワード等の入力する情報は間違っていない為、エラーメッセージも表示されず単純にリダイレクトされると言った状況です。
この問題に関して調べた所、過去の質問やQiita記事などに行きつきました。しかし「初期データが作成されていなかった為 seed.rb
を使ってデータを作成してからログインを試みる解決した」と言う情報しか得られませんでした。
私の場合 Heroku run rails c
-> User.all
を試したところ、該当のユーザーはきちんとデータベースに登録されている事が確認出来ました。ユーザー情報が存在しているにも関わらずログインが出来ないと言う状況です。
Heroku logs -t
でログを確認してみたものの、エラーらしき記述を見つける事が出来ませんでした。以下がログインアクションを含む、ステージング環境を動かした際のログです。
2021-10-12T06:47:00.234658+00:00 heroku[web.1]: Process exited with status 143 2021-10-12T06:47:07.000000+00:00 app[api]: Build succeeded 2021-10-12T06:47:08.927921+00:00 heroku[web.1]: Starting process with command `bin/rails server -p ${PORT:-5000} -e production` 2021-10-12T06:47:13.161822+00:00 heroku[web.1]: State changed from starting to up 2021-10-12T06:47:22.072892+00:00 heroku[router]: at=info method=GET path="/" host=hoge.herokuapp.com request_id=92132780-ed51-4f7e-a38f-1ddcac5daf99 fwd="106.181.160.222" dyno=web.1 connect=0ms service=73ms status=302 bytes=969 protocol=https 2021-10-12T06:47:22.001611+00:00 app[web.1]: => Booting Puma 2021-10-12T06:47:22.001625+00:00 app[web.1]: => Rails 5.2.6 application starting in production 2021-10-12T06:47:22.001626+00:00 app[web.1]: => Run `rails server -h` for more startup options 2021-10-12T06:47:22.001626+00:00 app[web.1]: Puma starting in single mode... 2021-10-12T06:47:22.001626+00:00 app[web.1]: * Version 3.12.6 (ruby 2.6.8-p205), codename: Llamas in Pajamas 2021-10-12T06:47:22.001627+00:00 app[web.1]: * Min threads: 5, max threads: 5 2021-10-12T06:47:22.001627+00:00 app[web.1]: * Environment: production 2021-10-12T06:47:22.001627+00:00 app[web.1]: * Listening on tcp://0.0.0.0:19816 2021-10-12T06:47:22.001627+00:00 app[web.1]: Use Ctrl-C to stop 2021-10-12T06:47:22.001628+00:00 app[web.1]: I, [2021-10-12T06:47:22.001511 #4] INFO -- : [92132780-ed51-4f7e-a38f-1ddcac5daf99] Started GET "/" for 106.181.160.222 at 2021-10-12 06:47:22 +0000 2021-10-12T06:47:22.002655+00:00 app[web.1]: I, [2021-10-12T06:47:22.002597 #4] INFO -- : [92132780-ed51-4f7e-a38f-1ddcac5daf99] Processing by UsersController#top as HTML 2021-10-12T06:47:22.068886+00:00 app[web.1]: D, [2021-10-12T06:47:22.068807 #4] DEBUG -- : [92132780-ed51-4f7e-a38f-1ddcac5daf99] User Load (1.3ms) SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT $1 [["LIMIT", 1]] 2021-10-12T06:47:22.069356+00:00 app[web.1]: I, [2021-10-12T06:47:22.069304 #4] INFO -- : [92132780-ed51-4f7e-a38f-1ddcac5daf99] Redirected to https://hoge.herokuapp.com/login 2021-10-12T06:47:22.069415+00:00 app[web.1]: I, [2021-10-12T06:47:22.069390 #4] INFO -- : [92132780-ed51-4f7e-a38f-1ddcac5daf99] Filter chain halted as :authenticate_user rendered or redirected 2021-10-12T06:47:22.069517+00:00 app[web.1]: I, [2021-10-12T06:47:22.069493 #4] INFO -- : [92132780-ed51-4f7e-a38f-1ddcac5daf99] Completed 302 Found in 67ms (ActiveRecord: 28.0ms) 2021-10-12T06:47:22.483502+00:00 heroku[router]: at=info method=GET path="/login" host=hoge.herokuapp.com request_id=b8471159-6064-43d7-8c4b-857a9267369e fwd="106.181.160.222" dyno=web.1 connect=0ms service=44ms status=200 bytes=5015 protocol=https 2021-10-12T06:47:22.439459+00:00 app[web.1]: I, [2021-10-12T06:47:22.439391 #4] INFO -- : [b8471159-6064-43d7-8c4b-857a9267369e] Started GET "/login" for 106.181.160.222 at 2021-10-12 06:47:22 +0000 2021-10-12T06:47:22.440264+00:00 app[web.1]: I, [2021-10-12T06:47:22.440195 #4] INFO -- : [b8471159-6064-43d7-8c4b-857a9267369e] Processing by UsersController#login_form as HTML 2021-10-12T06:47:22.448194+00:00 app[web.1]: D, [2021-10-12T06:47:22.447956 #4] DEBUG -- : [b8471159-6064-43d7-8c4b-857a9267369e] User Load (3.3ms) SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT $1 [["LIMIT", 1]] 2021-10-12T06:47:22.460549+00:00 app[web.1]: I, [2021-10-12T06:47:22.460442 #4] INFO -- : [b8471159-6064-43d7-8c4b-857a9267369e] Rendering users/login_form.html.erb within layouts/application 2021-10-12T06:47:22.463981+00:00 app[web.1]: I, [2021-10-12T06:47:22.463869 #4] INFO -- : [b8471159-6064-43d7-8c4b-857a9267369e] Rendered users/login_form.html.erb within layouts/application (3.2ms) 2021-10-12T06:47:22.476022+00:00 app[web.1]: D, [2021-10-12T06:47:22.475940 #4] DEBUG -- : [b8471159-6064-43d7-8c4b-857a9267369e] CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT $1 [["LIMIT", 1]] 2021-10-12T06:47:22.480355+00:00 app[web.1]: I, [2021-10-12T06:47:22.480293 #4] INFO -- : [b8471159-6064-43d7-8c4b-857a9267369e] Completed 200 OK in 40ms (Views: 20.9ms | ActiveRecord: 3.3ms) 2021-10-12T06:47:24.905575+00:00 heroku[router]: at=info method=GET path="/country-select-js-master/build/css/countrySelect.css" host=hoge.herokuapp.com request_id=0150fcf9-a871-499a-9183-b4af89f791e6 fwd="106.181.160.222" dyno=web.1 connect=0ms service=6ms status=200 bytes=23223 protocol=https 2021-10-12T06:47:36.035785+00:00 heroku[router]: at=info method=POST path="/login" host=hoge.herokuapp.com request_id=25e922c2-a2d9-4c0a-82e2-4bd629c7f72a fwd="106.181.160.222" dyno=web.1 connect=0ms service=13ms status=200 bytes=5009 protocol=https 2021-10-12T06:47:36.029749+00:00 app[web.1]: I, [2021-10-12T06:47:36.029673 #4] INFO -- : [25e922c2-a2d9-4c0a-82e2-4bd629c7f72a] Started POST "/login" for 106.181.160.222 at 2021-10-12 06:47:36 +0000 2021-10-12T06:47:36.030350+00:00 app[web.1]: I, [2021-10-12T06:47:36.030307 #4] INFO -- : [25e922c2-a2d9-4c0a-82e2-4bd629c7f72a] Processing by UsersController#login as HTML 2021-10-12T06:47:36.030398+00:00 app[web.1]: I, [2021-10-12T06:47:36.030366 #4] INFO -- : [25e922c2-a2d9-4c0a-82e2-4bd629c7f72a] Parameters: {"utf8"=>"✓", "authenticity_token"=>"Beft8hxwZ0OxZeSL3M3wuzQ2rAMzfbO4268bjy+Mmon0FQE9SA+ahZ9aemMqLOehklbP/S5G1XIfmJbF6KK1qQ==", "email"=>"hoge@fuga.comm", "password"=>"[FILTERED]"} 2021-10-12T06:47:36.033840+00:00 app[web.1]: D, [2021-10-12T06:47:36.033777 #4] DEBUG -- : [25e922c2-a2d9-4c0a-82e2-4bd629c7f72a] User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT $1 [["LIMIT", 1]] 2021-10-12T06:47:36.034672+00:00 app[web.1]: I, [2021-10-12T06:47:36.034626 #4] INFO -- : [25e922c2-a2d9-4c0a-82e2-4bd629c7f72a] Completed 200 OK in 4ms (ActiveRecord: 1.2ms)
ローカル環境では新規ユーザー登録・ログイン共に問題なく出来ますので、ログイン機能に関するコードに問題はないと思いますが、必要なコードやログがありましたら追記させて頂きます。
またローカル環境でログインを試みた際のログは以下の様になります。
Started POST "/login" for ::1 at 2021-10-12 22:05:33 +0900 Processing by UsersController#login as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"tiF++rWWqbqxr7qrIDVwWM7l/maX+DmYI+Lrz99GpiIURMAkSz66n/4Dvv5vlvJa3EyPe23oVuvC6cYmLNbSjg==", "email"=>"hoge@fuga.com", "password"=>"[FILTERED]"} User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IS NULL LIMIT 1 ↳ app/controllers/application_controller.rb:9 User Load (5.1ms) SELECT `users`.* FROM `users` WHERE `users`.`email` = 'hoge@fuga.com' LIMIT 1 ↳ app/controllers/users_controller.rb:255 Redirected to http://localhost:3000/ Completed 302 Found in 400ms (ActiveRecord: 23.5ms) Started GET "/" for ::1 at 2021-10-12 22:05:33 +0900 Processing by UsersController#top as HTML User Load (6.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 8 LIMIT 1 以下略
何か思い当たる原因はありそうでしょうか。どなたかご助言を頂けますと有難いです。
コード
routes.rb
get "login" => "users#login_form" post "login" => "users#login"
users_controller.rb
class UsersController < ApplicationController before_action :authenticate_user, {except: [:new, :create, :login_form, :login]} before_action :forbid_login_user, {only: [:new, :create, :login_form, :login]} def login @user = User.find_by(email: params[:email]) if @user && @user.authenticate(params[:password]) session[:user_id] = @user.id flash[:notice] = "You have successfully logged in" redirect_to("/") else @error_message = "Email address or password is incorrect" @email = params[:email] @password = params[:password] render("users/login_form") end end def login_form end end
users/login_form.html.erb
<% if @error_message %> <div class="form-error"> <%= @error_message %> </div> <% end %> <%= form_tag("/login") do %> <ul> <li> <div class="col-1">Email</div> <div class="col-2"><input size="60" name="email" value="<%= @email %>"></div> </li> <li> <div class="col-1">Password</div> <div class="col-2"><input size="40" id="password" name="password" type="password" value="<%= @password %>"></div> <span toggle="#password-field" class="fa fa-fw fa-eye field_icon toggle-password"></span> </li> <li> <div class="save"><input class="btn-square-little-rich" id="button" type="submit" value="Log in" onclick="myfunk()"></div> </li> </ul> <% end %>
試したこと
以前secure
属性をいじった事で、ローカル環境でログイン出来なくなった事がありました。
その際は secure: true
に設定してしまった為、https
ではクッキーが発行されるけれどもhttp
ではクッキーが発行されずログイン出来ない為リダイレクトしてしまう、と言う内容でした。
今回は逆にhttps
であるステージング環境で起きている問題ですので関係はないかと思いましたが、一応以下の様に secure: false
にして試してみるも、やはり結果は変わりませんでした。
config/application.rb
config.session_store :cookie_store, expire_after: 8.hours, secure: Rails.env.production? ↓ config.session_store :cookie_store, expire_after: 8.hours, secure: false
config/production.rb
config.force_ssl = true ↓ config.force_ssl = false # application.rb内で記述した、secure: Rails.env.production?(本番環境のみSSL属性を付ける(SSL化する))為に必要なコード。デフォルトのfalseに直すも結果は変わらず。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.4p104
RubyGems 3.0.3
Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー