Rails 3与Devise一起使用:无路由匹配/d/users/sign_out。
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路由文件的屏幕截图。很抱歉,它很小,但是您可以右键单击将其单独查看以获得更大的屏幕。
更新#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日