6

デバイスエラーからサインアウトしようとすると、次のエラーが発生します。

[GET] "/d/users/sign_out" に一致するルートはありません

私のタグは正しいです、それは次のとおりです:

<%= link_to "Sign Out", destroy_session_path, :method=>:delete %>

デバイスの私のルートは次のとおりです。

devise_for :users, :path_prefix=>"d", :controllers=>{:sessions=>"sessions"}

他のルートは次のとおりです。

resources :users#For CRUD defined after devise_for like in Devise Wiki

Devise wiki ページのような ajax ログイン用のカスタム コントローラー セッション:

class SessionsController < Devise::SessionsController

 def create
  respond_to do |format|
    format.html{ super }
    format.json do
     resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
     #resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
     return sign_in_and_redirect(resource_name, resource)
    end
   end
  end

def sign_in_and_redirect(resource_or_scope, resource=nil)
  scope = Devise::Mapping.find_scope!(resource_or_scope)
  resource ||= resource_or_scope
  sign_in(scope, resource) unless warden.user(scope) == resource
  return render :json => {:success => true, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)}
end

def failure
  return render:json => {:success => false, :errors => ["Login failed."]}
end

end

デバイス初期化子には次のものがあります。

config.sign_out_via = :delete

問題の原因について何か考えはありますか? Google で検索しましたが、まだ困惑しています。

アップデート:

これは、devise ユーザー向けの rails routes ファイルのスクリーンショットです。小さくて申し訳ありませんが、右クリックして単独で大きな画面で表示できます。

ここに画像の説明を入力

更新 #2:

jquery_ujs ファイルが含まれています。

更新 #3:

削除が実際に渡されていることがコンソールに表示されますが、sessions_controller から / にジャンプし、次に d/users/sign_out にジャンプしています...これを修正する方法がわかりません。

更新 #4:

リダイレクトすると、最初に d/users/sign_out に DELETE として移動します。次に、リダイレクト先にリダイレクトしroot_url、エラーが発生しますERROR Errno::ECONNABORTED: An established connection was aborted by the software in your host machine. 。次に、失敗している GET として d/users/sign_out にリダイレクトしようとします。

4

3 に答える 3

4

これは、Devise と Ruby 1.9.2-p290 の間の問題のようです。Ruby 1.9.3 に更新して実行bundle update し、Devise の最新バージョンが使用されていることを確認します。動作するようです。

于 2012-07-16T15:52:44.360 に答える
1

//= require jquery_ujsapplication.jsファイルから削除したようです。リンクの詳細を処理して「削除」リクエストを行うと思います。いずれにせよ、現在のように、あなたは明らかにあなたのdestroy_user_sessionメソッドにヒットしない「GET」を作成しています。

于 2012-07-13T19:12:18.490 に答える
1

変化する:

config.sign_out_via = :delete

に:

config.sign_out_via = :get

この関連を参照してください:

"/users/sign_out" devise rails 3 に一致するルートはありません

于 2012-07-13T19:35:08.267 に答える