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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

5008閲覧

Deviseで正しいメールアドレスとパスワードを入れてもログインできずにリダイレクトで無限ループしてしまう

joru

総合スコア45

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/04/28 11:29

編集2019/04/28 12:03

前提・実現したいこと

railsサービスでdeviseを用いて、ユーザの登録画面を作り、その上でこの記事を参考にして、最初はメールアドレスだけを入れ、メール認証のあとパスワードを設定する流れにしました。

すると、rails dbconsoleで確認しても登録されているメールアドレスとパスワードの組み合わせでもログインできなくなってしまいました。

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

Started POST "/users/sign_in" for ::1 at 2019-04-28 20:52:37 +0900 Processing by Devise::SessionsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"0uhzmTtZPorE4kBCoJhyMxgbl3Mn0UKgIE5fCwooTSvc6fIpIvITKcn4ft15NZMmAnOa3oxMF1aDS7a5OWK2fQ==", "user"=>{"email"=>"kohei.discard@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} Can't verify CSRF token authenticity. User Load (1.8ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? ORDER BY "users"."id" ASC LIMIT ? [["email", "kohei.discard@gmail.com"], ["LIMIT", 1]] ↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98 Redirected to http://localhost:3000/ Completed 302 Found in 204ms (ActiveRecord: 1.8ms) Started GET "/" for ::1 at 2019-04-28 20:52:37 +0900 Processing by CouponsController#index as HTML Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)

該当のソースコード

基本的にソースコードはこの記事通りです。

関連ファイルが多く、どれこのエラーに作用しているのかわからないので、自分が怪しいと思うルートファイルを載せておきます。

ruby

1 routes.rb 2 3 devise_for :users, controllers: { 4 registrations: "users/registrations", 5 confirmations: "users/confirmations" 6 } 7 devise_scope :user do 8 patch "users/confirmation", to: "users/confirmations#confirm" 9 end

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

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

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

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

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

guest

回答2

0

ベストアンサー

ブラウザのCookieをクリアしたらどうでしょうか?

投稿2019/05/08 03:19

odyu

総合スコア548

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

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

joru

2019/05/11 02:57

ブラウザをfirefoxを用いるといまだにうまくいかないのですが、chromeだとcookieを消したことでうまくいきました。 ありがとうございます
guest

0

Can't verify CSRF token authenticity

が原因ではないですか?

sessionで保持しているものと、この度、authenticity_tokenをキーとして送られたコード0uhzmTtZPorE4kBCoJhyMxgbl3Mn0UKgIE5fCwooTSvc6fIpIvITKcn4ft15NZMmAnOa3oxMF1aDS7a5OWK2fQ が異なるので、弾いているのだと思います。

投稿2019/04/28 16:00

編集2019/04/28 16:01
urbainleverrier

総合スコア200

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

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

joru

2019/04/30 15:40

tktkt様 セッションの保持しているauthenticity_tokenはどのようにして確認すれば良いのでしょうか?
joru

2019/04/30 15:46

一応protect_from_forgery with: :null_sessionをapplication.rbに記述しているのでCan't verify CSRF token authenticityのエラーが原因だとは考えにくいのですが...
urbainleverrier

2019/05/01 03:55

> セッションの保持しているauthenticity_tokenはどのようにして確認すれば良いのでしょうか? session変数の中に格納されていると思います。`session[: _csrf_token]`で確認できます。確か、リクエストからレスポンスまでの流れの中で、早い段階で確認するので、controller中でbinding.pryなんかで止めて見ようと思っても、跳ね返されちゃうかもしれません。getリクエストならverify tokenしなかったようなソースコードを見たことがあるので、getでアクセスして見てみてください。 > protect_from_forgery with: :null_sessionをapplication.rbに記述している application_controllerではないですか?
joru

2019/05/01 12:23 編集

session_controller.rbのnewメソッドで、 p session[:_csrf_token]を吐いたところ以下のようになりました。 Started POST "/users/sign_in" for ::1 at 2019-05-01 21:19:16 +0900 (0.6ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC ↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98 Processing by Users::SessionsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"rPknADgldCBF9HMsBKjZm5ydwUBCh/Eh399W1e/poNfeNB6o6Sg8E2duFhx/7+N9/nJhj2zOg0nVdLgzKZSeFw==", "user"=>{"email"=>"kohei.discard@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} Can't verify CSRF token authenticity. User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? ORDER BY "users"."id" ASC LIMIT ? [["email", "kohei.discard@gmail.com"], ["LIMIT", 1]] ↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98 Redirected to http://localhost:3000/ Completed 302 Found in 230ms (ActiveRecord: 1.5ms) Started GET "/" for ::1 at 2019-05-01 21:19:16 +0900 Processing by CouponsController#index as HTML Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms) Started GET "/users/sign_in" for ::1 at 2019-05-01 21:19:16 +0900 Processing by Users::SessionsController#new as HTML Rendering users/sessions/new.html.erb within layouts/application Rendered users/shared/_links.html.erb (2.0ms) Rendered users/sessions/new.html.erb within layouts/application (18.3ms) "nEJZdFvhUsjrYbuMsyzBPmdO3QcxfD2kSIfF0hFdIqI=" Completed 200 OK in 2685ms (Views: 2681.9ms | ActiveRecord: 0.0ms) Started POST "/users/sign_in" for ::1 at 2019-05-01 21:22:33 +0900 Processing by Users::SessionsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"iw1V7YKAbkzfP6t8LvH6avNDbudM89Dezgoem8tYs0sXTwyZ2WE8hDReEPCd3TtUlA2z4H2P7XqGjdtJ2gWR6Q==", "user"=>{"email"=>"kohei.discard@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} Can't verify CSRF token authenticity. User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? ORDER BY "users"."id" ASC LIMIT ? [["email", "kohei.discard@gmail.com"], ["LIMIT", 1]] ↳ vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98 Completed 401 Unauthorized in 183ms (ActiveRecord: 0.2ms) Processing by Users::SessionsController#new as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"iw1V7YKAbkzfP6t8LvH6avNDbudM89Dezgoem8tYs0sXTwyZ2WE8hDReEPCd3TtUlA2z4H2P7XqGjdtJ2gWR6Q==", "user"=>{"email"=>"kohei.discard@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"} Can't verify CSRF token authenticity. Rendering users/sessions/new.html.erb within layouts/application Rendered users/shared/_links.html.erb (1.3ms) Rendered users/sessions/new.html.erb within layouts/application (5.7ms) "oZ8AR5dC+QMRb2JMlglvRMQ4qrkOdiKe1bYsyDC2l04=" Completed 200 OK in 440ms (Views: 274.7ms | ActiveRecord: 0.0ms) 確かにsessionで保持しているものと、この度、authenticity_tokenをキーとして送られたコードは異なっているようです。 またapplication_controllerの間違いでした。
urbainleverrier

2019/05/02 05:57

なぜ、tokenが異なるのか調査する必要があります。 csrf tokenの切り替わるタイミングで、htmlに添付し、デフォルトのsession保存先としてcookieを指定していれば、cookieに暗号化されたcsrf tokenが渡されるはずです。 今回、cookie(おそらく)とhtmlに添付されているものとの間で食い違いが起きていることが `Can't verify CSRF token authenticity.`を起こしていると思われます。 また、ヒントを見つける手助けとして、railsが用意しているform_forを使うと、railsはhtml上に設置してあるcsrf tokenを自動的に取得し、送る仕様になっています。 私としては、サーバー側で何か原因があるような気がするのですが、今のままではわかりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問