Rails 3与Devise一起使用:无路由匹配/d/users/sign_out。

23 浏览
0 Comments

Rails 3与Devise一起使用:无路由匹配/d/users/sign_out。

当我尝试退出devise时,我遇到了以下错误:

没有路由与 [GET] \"/d/users/sign_out\" 匹配

我的标签是正确的,如下所示:

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

我的devise路由是:

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

其他路由是:

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

使用自定义控制器sessions进行ajax登录,就像在Devise维基页面上一样:

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

devise初始化器包含:

config.sign_out_via = :delete

有什么想法可以解决这个问题吗?我在谷歌上搜索了,仍然感到困惑。

更新:

这是devise用户的rails路由文件的屏幕截图。很抱歉,它很小,但是您可以右键单击将其单独查看以获得更大的屏幕。

\"enter

更新#2:

jquery_ujs文件已包含。

更新#3:

在控制台中,似乎确实传递了delete,但它从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,失败了。

admin 更改状态以发布 2023年5月23日
0
0 Comments

看起来你可能已经从你的application.js文件中删除了//= require jquery_ujs。我认为它处理了链接的细节,以使其成为一个“删除”请求。不管怎样,现在你正在进行一个'GET'请求,显然不会触发你的destroy_user_session方法。

0
0 Comments

这似乎是Devise和Ruby 1.9.2-p290之间的问题。升级到Ruby 1.9.3并运行bundle update以确保使用最新版本的Devise即可解决。

0