ruby-on-rails – Rails设计错误“没有路由匹配[GET]”/ users / sign_out“”

当我手动将URL输入浏览器时,我只会收到此错误.如果我点击我网站上的“退出”链接,它会将用户记录正常.这是我的“退出”链接:

<%= link_to "Sign out", destroy_user_session_path, method: :delete %>

哪作得很完美.如果用户在地址栏中键入地址,如何才能使注销功能正常工作?我知道它与GET和DELETE请求有关.它正在使用链接的DELETE请求,但在手动输入URL时使用GET请求.我怎样才能解决这个问题?

最佳答案
基本上,
当您尝试手动键入url或尝试使用新选项卡单击链接“注销”时,会出现HTTP GET请求,您将获得无路由匹配[GET]“/ users / sign_out”,因为您不存在您的routes.rb上只有/ users / sign_out的DELETE请求,对于您可以在config / initializer / devise.rb中添加此解决方案的解决方案

# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = Rails.env.test? ? :get : :delete

并在routes.rb上更改DELETE到MATCH请求

例如:匹配’users / sign_out’=> “色器件/会话#消灭”

供参考:Devise for user management and authentication.

说实话,假设更改默认的’删除’HTTP方法,建议不要这样做.用户进行测试(例如使用黄瓜)
Cucumber Testing for “Sign Out”

Jose Valim explained why: “GET requests should not change the state of
the server. When sign out is a GET request, CSRF can be used to sign
you out automatically and things that preload links can eventually
sign you out by mistake as well.”

@manoj mona说’我们不能让用户通过输入网址退出.这是一个不好的做法’

因此,如果用户通过URL中的类型注销.

>您可以定义它,如果获取请求它将重定向或呈现通知(如stackoverflow注销)
>或者不要使用link_to标签进行退出,使用带有表单的输入标签(如facebook退出),因此用户无法输入URL,请参阅this answer

转载注明原文:ruby-on-rails – Rails设计错误“没有路由匹配[GET]”/ users / sign_out“” - 代码日志