Ruby on Railsでdeviseを使用してログイン機能を実装していたら、ログアウトボタンを設置してクリックしたら、表題のエラーが発生してしまいました。
解決方法は以下でした。
routes.rbに以下のコードを追加しました。
devise_scope :user do
get '/users/sign_out' => 'devise/sessions#destroy'
end
以下を参考にしました。ありがとうございます。
状況
以下をapplication.html.erbに追加しました。
<%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "button is-warning is-light" %>
config/initializers/devise.rbは以下のように記載されていました。
config.sign_out_via = :delete
上記をconfig.sign_out_via = :getにしても治るという記事もありましたが、ダメでした。
ちなみにrails routesは以下です。
% rails routes
Prefix Verb URI Pattern Controller#Action
root GET / home#index
new_user_session GET /users/sign_in(.:format) users/sessions#new
user_session POST /users/sign_in(.:format) users/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) users/registrations#cancel
new_user_registration GET /users/sign_up(.:format) users/registrations#new
edit_user_registration GET /users/edit(.:format) users/registrations#edit
user_registration PATCH /users(.:format) users/registrations#update
PUT /users(.:format) users/registrations#update
DELETE /users(.:format) users/registrations#destroy
POST /users(.:format) users/registrations#create
refile_app /attachments #<Refile::App app_file="/Users/user/.bundle/ruby/2.6.0/refile-46b4178654e6/lib/refile/app.rb">
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroyとなっているのにGETで呼ばれているのがエラーの原因みたいですね。
明示的にルーティングしてあげることで解決したようですね。
コメント