LoginSignup
2
1

【Rails devise】Couldn't find User with 'id' = sign_out

Last updated at Posted at 2022-12-04

状況

Rails6でdeviseを使用していると、以下のようなエラーが表示されログアウトができなくなることがある。

Couldn't find User with 'id' = sign_out

このエラーに掛かっている人はおそらく、ログアウトのメソッドとして以下のようにDELETEを指定しているだろう。

<%= link_to'ログアウト', destroy_user_session_path, method: :delete %>

しかし、DELETEを指定していてもメソッドがGETになってしまうことがあるようだ。(この点の詳細は私には分かりかねるので別の情報をご参照いただきたい。)

対処法には大きく以下の二つがある。

対処法① ルーティングを設定する

ルーティングを以下のように設定し、GETリクエストをdestroy Actionへ渡す。

config/routes.rb
devise_scope :user do
  get '/users/sign_out' => 'devise/sessions#destroy'
end

これでGETメソッドで取得されたリクエストをDLETEに変換することができる。

対処法② deviseの設定を変える

devise.rbの設定を以下のように、:deleteから:getに変更。(デフォルトだと272行目あたり)

config/initializers/devise.rb
  config.sign_out_via = :get

これを変更した後、サーバーを立て直す必要がある。ローカルでサーバーを立てている場合はrails sを、docker環境の場合はコンテナをビルドし直す必要がある。

これで、getメソッドによるログアウトが可能になる。

所感

関連する記事をいくつか確認したが、このようにある日突然、同じコードで同じ処理ができなくなるというのは、やはりなんか気持ち悪い。このようなエラーは自力で原因が分かりづらいので、ここに記すことで微力ながらどなたかの解決の一助となればと思う。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1