Railsログアウト処理でNo route matches [GET] “/logout”となるときの対処法

Railsでsorceryを使った認証機能の実装方法を以前紹介しました。

認証機能のログアウトの際に「No route matches [GET] “/logout”」というエラーが出てしまうときの対処法をまとめます。

Sorceryを使った認証機能の実装方法はこちらにまとめていますので、こちらの内容を踏まえて説明します。
参考:SorceryでRailsアプリケーションに認証機能を実装する

ログアウト周りの設定を念のため確認

詳しくは、SorceryでRailsアプリケーションに認証機能を実装するという記事にまとめていますが、ログアウト周りの設定だけ確認しておきます。

ログアウト用のリンク

<%= link_to "Logout", "/logout", method: :post%>

user_sessionsコントローラーのdestroyアクション

    def destroy
        logout
        redirect_to "/login"
    end

ルーティング

  get "/login" => "user_sessions#new"
  post '/login' => 'user_sessions#create'
  post '/logout' => 'user_sessions#destroy', :as => :logout

ログアウト時にNo route matches [GET] “/logout”エラーが出る理由

HTML上でログアウト用のリンクに「data-method=”post」が入っていることを確認します。

<a rel="nofollow" data-method="post" href="/logout">Logout</a>

このように記述されていれば問題ないはずです。

<%= link_to "Logout", "/logout", method: :post%>

「data-method=”post」と記述されているにもかかわらず、ログアウト時にNo route matches [GET] “/logout”というエラーが出る理由は、jQueryが動いていないためにpostメソッドが呼ばれていないことです。

/assets/japascripts/application.jsでjqueryが呼び出されるようになっているか確認しましょう。下記が記入されてないとだめです。なければ追記してください。

//= require jquery
//= require jquery_ujs

gemfileには下記のgemが入っている必要があります。入ってなければ追記してbundle installします。

gem 'jquery-rails'

ハマるとなかなか原因が分からない系のエラーの一つなので、sorceryのログアウトでハマったら思い出してみてください。

Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする