Ruby on Rails - devise用户/sign_out无法正常工作

22 浏览
0 Comments

Ruby on Rails - devise用户/sign_out无法正常工作

我正在使用Devise,sign_insign_up的URL都可以使用。

但是,当我尝试访问URL:http://localhost:3000/users/sign_out

它会生成路由错误。

No route matches [GET] "/users/sign_out"

我该如何修复这个问题?

rake routes

rake routes
        new_user_session GET    /users/sign_in(.:format)           {:action=>"new", :controller=>"devise/sessions"}
            user_session POST   /users/sign_in(.:format)           {:action=>"create", :controller=>"devise/sessions"}
    destroy_user_session DELETE /users/sign_out(.:format)          {:action=>"destroy", :controller=>"devise/sessions"}
           user_password POST   /users/password(.:format)          {:action=>"create", :controller=>"devise/passwords"}
       new_user_password GET    /users/password/new(.:format)      {:action=>"new", :controller=>"devise/passwords"}
      edit_user_password GET    /users/password/edit(.:format)     {:action=>"edit", :controller=>"devise/passwords"}
                         PUT    /users/password(.:format)          {:action=>"update", :controller=>"devise/passwords"}
cancel_user_registration GET    /users/cancel(.:format)            {:action=>"cancel", :controller=>"devise/registrations"}
       user_registration POST   /users(.:format)                   {:action=>"create", :controller=>"devise/registrations"}
   new_user_registration GET    /users/sign_up(.:format)           {:action=>"new", :controller=>"devise/registrations"}
  edit_user_registration GET    /users/edit(.:format)              {:action=>"edit", :controller=>"devise/registrations"}
                         PUT    /users(.:format)                   {:action=>"update", :controller=>"devise/registrations"}
                         DELETE /users(.:format)                   {:action=>"destroy", :controller=>"devise/registrations"}
    status_message_index GET    /status_message(.:format)          {:action=>"index", :controller=>"status_message"}
                         POST   /status_message(.:format)          {:action=>"create", :controller=>"status_message"}
      new_status_message GET    /status_message/new(.:format)      {:action=>"new", :controller=>"status_message"}
     edit_status_message GET    /status_message/:id/edit(.:format) {:action=>"edit", :controller=>"status_message"}
          status_message GET    /status_message/:id(.:format)      {:action=>"show", :controller=>"status_message"}
                         PUT    /status_message/:id(.:format)      {:action=>"update", :controller=>"status_message"}
                         DELETE /status_message/:id(.:format)      {:action=>"destroy", :controller=>"status_message"}
                    home        /home(.:format)                    {:action=>"index", :controller=>"status_message"}
                    root        /                                  {:controller=>"home", :action=>"index"}

routes.rb

Microblog::Application.routes.draw do
  devise_for :users, :controllers => {:migrations => "users/registrations"}
  resources 'status_message'
  match 'home' => 'status_message#index'
  root :to => 'home#index'
end

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

上述任何建议都没有为我解决问题......

这篇文章可以更有用地找到其他替代方案。
No route matches "/users/sign_out" devise rails 3

我必须在application.js文件中添加以下行

//= require_tree .
// Add following lines.
//= require jquery 
//= require jquery_ujs

0
0 Comments

这个错误的原因是该路径不能使用GET HTTP方法进行访问。请查看在您的rake routes输出中相关行的内容:

destroy_user_session DELETE /users/sign_out(.:format)

这意味着,如果您想注销用户,则需要向该URL发送DELETE请求。在rails中,您可以这样生成一个完成此操作的链接:

link_to 'Sign out', destroy_user_session_path, :method => :delete
# alternatively (although NOT recommended):
link_to 'Sign out', '/users/sign_out', :method => :delete

重要的一部分是:method => :delete。请注意,浏览器实际上不支持DELETE请求,rails实际上是在POST数据,但它会发送一个模拟DELETE方法的特殊参数。

这样做的原因是“注销”URL是一个会使当前用户注销的URL,这是一个具有破坏性的操作。如果它可以通过浏览器自由访问,可能会引起各种问题。GET请求应该永远不会改变服务器的状态。有关更多信息,请参阅这篇不错的维基百科文章:http://en.wikipedia.org/wiki/REST#RESTful_web_services

0